GNU make

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

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

Makefile(术语)

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

  Target: prerequisites

    command

  目标 依赖 命令

例子:main.o : main.c

                     gcc –c main.c(注意:命令需要以TAB键开始)

例:

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

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

  .PHONY:clear

  clear: rm  –f  hello  main.o  func1.o  func2.o

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

利用变量

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中,存在系统默认的自动化变量

  (1)$^:代表所有的依赖文件

  (2)$@:代表目标

  (3)$<:代表第一个依赖文件

例:hello: main.o func1.o func2.o

              gcc main.o fun1.o func2.o –o hello

->

  hello: main.o func1.o func2.o

         gcc $^ -o $@

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

  hello:hello.c

         @gcc hello.c –o hello

@:取消回显

原文地址:https://www.cnblogs.com/fengz/p/7039334.html