Makefile 可以通过工具如 gcc 的-M或-MM选项、makedepend 工具或 CMake 等自动生成头文件依赖。这些工具会检查源文件并输出头文件的依赖关系,这样在源文件或头文件更新时,只需重新编译影响的部分即可。使用 gcc 的-M或-MM选项时,通常是在 Makefile 的编译规则中加入这些选项,来生成包含依赖关系的.d文件,并将它...
从上面make的执行过程中可看出,要动态生成依赖关系,只能利用第2步读入其它Makefile的机制。那么,我们是否可以先把生成的依赖关系保存到文件,然后再把该文件的内容包含进来? 答案是Yes! 只要利用include的机制。 include关键字是用于读入其它Makefile文件。当该文件不存在时,make会寻找是否有生成它的规则,如果有,则执行...
内建变量$<的值为第一个依赖文件(那seq.c),$$$为字符串"$$",由于makefile中所有的$字符都是特殊字符(即使在单引号之中!),要得到普通字符$,需要用$$来转义; 而$$是shell的特殊变量,它的值为当前进程号;使用进程号为后缀的名称创建临时文件,是shell编程常用做法,这样可保证文件唯一性。 第三个命令作用是...
1.makefile 三要素 :目标,依赖文件,命令 2.Makefile变量:为了快速记录长而复杂的命令,同时能够通过改变Makefile变量提高Makefile文件的通用性 3.分支判断:根据条件执行不同命令 4.头文件依赖:工程包括很多文件 5.隐含规则:根据makefile的隐含规则减少编写makefile的工作量 6.自动化变量+模式规则 7.makefile函数:提...
Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程。 Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖。 makefileCC = gcc CFLAGS = -Wall -O INCLUDEFLAGS = LDFLAGS = OBJS = seq.o ...
1.支持头文件依赖 a.c #include <stdio.h>void func_b();void func_c();int main(){func_b();func_c();return 0;} b.c #include <stdio.h>void func_b(){printf("This is B\n");} c.c #include <stdio.h>#include "c.h"void func_c(){printf("This is C = %d\n", C);} ...
结果1 题目在Makefile中,若依赖关系需要包含一系列的头文件,比如,如果main.c中有一句“#include "defs.h"”,试写出建立依赖关系的语句。相关知识点: 试题来源: 解析 答:在Makefile中,建立这种依赖关系的语句是:main.o : main.c defs.h 反馈 收藏 ...
首先先在目录下新建四个文件夹,其中就包含了fun.h这个文件。 makefile: OBJS := fun.o main.o hello : $(OBJS) gcc -o $@ $^ $(OBJS): %.o : %.c gcc -o $@ -c $^ 1. 2. 3. 4. 5. 6. 7. 运行结果: 通过运行结果可以发现不包含.h文件的依赖,将没有办法找到头文件。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。 写好Makefile文件后,然后在该目录下直接输入命令“make”就可以生成执行文件——第一个目标文件(target)。如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下“make clean”就可以了。
自动生成依赖关系 1、编译行为带来的缺陷 预处理器将头文件中的代码直接插入源文件 编译器只通过预处理后的源文件产生目标文件 因此,规则中以源文件为依赖,命令可能无法执行 示例1观察以下makefile文件是否正确:当修改func.h中宏HELLO的内容后,执行make命令发现,编译器无法更新main.c和func.c,进而无法更新执行的结果...