网站 维护 协议,公关公司如何处理危机,wordpress网站搭建,品牌设计公司是做什么的迷途小书童 读完需要 4分钟 速读仅需 2 分钟 1 引言 下面这个 C 语言的代码非常简单 #include stdio.hint main()
{printf(Hello World!.\n);return 0;
} 在 Linux 下面#xff0c;我们使用下面的命令编译就可以 gcc hello.c -o hello 但是随着项目的变大… 迷途小书童 读完需要 4分钟 速读仅需 2 分钟 1 引言 下面这个 C 语言的代码非常简单 #include stdio.hint main()
{printf(Hello World!.\n);return 0;
} 在 Linux 下面我们使用下面的命令编译就可以 gcc hello.c -o hello 但是随着项目的变大势必会有越来越多的 .c 文件和 .h 头文件再直接使用编译器指令就非常麻烦了光输入文件名都会影响心情而且还非常容易出错比如下面的例子 gcc hello.c aaa.c bbb.c -lpthread -ltest1 -ltest2 -o hello 而且哪怕你只是修改一个文件也需要重新编译所有的文件白白浪费了很多的开发时间。要解决这个问题最好的方式就是把工程的编译规则写下来让编译器自动加载规则去进行编译。 要实现上述目标需要 2 个工具make 和 Makefile它们是搭配使用的各司其职 make它可以帮助我们找出项目里面修改变更过的文件并根据依赖关系找出受修改影响的其他相关文件然后对这些文件按照规则进行单独的编译这样一来就能避免重新编译项目的所有的文件。Makefile定义编译的规则、依赖关系make 工具就能精准地进行编译工作 2 Makefile 是什么 Makefile 是用于指定软件编译、链接的构建过程的文件一般位于软件源代码的根目录下。通过定义一系列的规则Makefile 告诉 make 工具应该如何编译和链接代码生成最终的可执行文件或库文件。 3 Makefile 基本语法 Makefile 由一系列 rule 组成rule 的基本格式是 target:prerequisites
command 这里target 是所要生成的文件prerequisites 是生成该 target 所依赖的文件或目标command 是实际执行的命令。 4 Makefile 示例 下面是一个简单的示例 app: main.o add.ogcc main.o add.o -o appmain.o: main.cgcc -c main.cadd.o: add.cgcc -c add.c 这段 Makefile 包含了 3 个 rule它指定了 app 依赖 main.o 和 add.o后两个又依赖各自的源码文件。make 将自动根据依赖关系完成编译。 所以这时候的编译命令就变的非常简单直接输入 make 即可生成可执行文件 app。 5 Makefile 常用知识点 在 Makefile 中可以定义变量例如 objects main.o kbd.o command.o display.oprog: $(objects)cc $(objects) -o prog 使用 objects 变量表示多个目标文件这样可以使语法更加简洁。 使用通配符可以批量指定一类目标例如 .PHONY: clean
clean:rm *.o 这里使用 *.o 指定了所有 .o 文件为 clean 目标的依赖这样 clean 时可以删除所有的 .o 文件。这里使用 .PHONY 声明伪目标这些目标不对应实际文件。 一个规则也可以指定多个目标例如 bigoutput littleoutput : text.ggenerate text.g -o bigoutputgenerate text.g -o littleoutput 上述例子中同时生成了 bigoutput 和 littleoutput。 使用静态模式可以在规则中引用目标名例如 %.o : %.c$(CC) -c $ -o $ 这个模式规则可以匹配所有的 .c 到 .o 的转换。 支持自定义函数例如 upcase $(subst a,A,$(1))a.o : a.c $(CC) -c $(call upcase,$) -o $ 这里使用 upcase 函数将参数转换为大写。 6 免费社群