GNU make

Linux程序员必须学会使用GNU make来构建和管理自己的软件工程。GNU的make能够使整个工程的编译、链接只需要一个命令就可以完成。

makefile

make在执行时,需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译、链接等规则。其中包括:工程中哪些源文件需要编译以及如何编译;需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。

Makefile(例)

 hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o:main.c
gcc -c main.c
func1.o:func1.c
gcc -c gunc1.c
func2.o:func2.c
gcc -c func2.c
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o

Makefile

规则:用于说明如何生成一个或多个目标文件,规则格式如下:

targets:prerequisites
    command
目标 依赖 命令

main.o:main.c
gcc -c main.c

**命令需要一【TAB】键开始**

目标

在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被整个目标所连带出来的,所以一定要让马克知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。

文件名

make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make -f 文件名

伪目标

Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。

.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o

“.PHONY”将“clean”目标声明为伪目标

变量

hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello

思考1:如果要为hello目标添加一个依赖,如:func3.o,该如何修改?
      答案1:

hello:main.o func1.o func2.o func3.o
gcc main.o func1.o func2.o func3.o -o hello

答案2:

obj=main.o func1.o func2.o func3.o
hello:$(obj)
gcc $(obj) -o hello

在makefile中,存在系统默认的自动化变量

  • $^:代表所有依赖文件
  • $@:代表目标
  • $<:代表第一个依赖文件

例:

hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello

==>

hello:main.o func1.o func2.o
gcc $^ -o $@

杂项

makefile中“#”字符后的内容被视作注释。

hello.c:hello.c
@gcc hello.c -o hello

@:取消回显

最新文章

  1. PHP RSA参数签名
  2. C#笔试(程序设计)
  3. Android 实用开源控件
  4. java 代理的三种实现方式
  5. AngularJs自定义指令详解(2) - template
  6. 【Android开发坑系列】之PopupWindow
  7. JS动态调用方法名示例介绍
  8. 【翻译习作】 Windows Workflow Foundation程序开发-第一章02
  9. 对iframe跨域通信的封装
  10. NDK jni 加载静态库
  11. 几款国产开源的Windows界面库
  12. BZOJ 3280: 小R的烦恼 &amp; BZOJ 1221: [HNOI2001] 软件开发
  13. 基于lua+nginx的abtest系统
  14. C++虚成员函数表vtable
  15. hiberate关系映射大全
  16. fzu1969 GCD Extreme 类似于uva10561
  17. 原生js及H5模拟鼠标点击拖拽
  18. hadoop day 7
  19. 同一个windows server 部署多个tomcat
  20. centos7,配置nginx服务器

热门文章

  1. flask中manage.py的用法
  2. logging日志类
  3. emacs在org-mode时输出pdf时,只输出为链接
  4. TP3.2单字母函数
  5. C++开发工程师面试题库 50~100道
  6. sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异
  7. 树链剖分学习笔记 By cellur925
  8. MVC和MTV结构分析
  9. iOS MD5 (Swift3)
  10. 模拟赛01 T3 盖房子