当我的程序包含包含另一个标题的标题时会发生什么? 比方说,例如,main.c包含header1.h,header1.h包括header2.h。我的makefile应该是:
main.x: main.o
gcc -o main.x
main.o: main.c header1.h header2.h
gcc -c main.c
OR是否不必包含header2.h?
main.x: main.o
gcc -o main.x
main.o: main.c header1.h
gcc -c main.c
或者根本不需要包含任何标题?
main.x: main.o
gcc -o main.x
main.o: main.c
gcc -c main.c
答案 0 :(得分:0)
在Makefile中列出依赖项的目的是让make
知道在什么情况下需要重建。如果自生成目标以来已修改列为依赖项的文件,则需要重建目标。因此,列出所有在构建目标时粗略查阅的文件是个好主意。
如果您没有列出包含小时的文件,那么一切都将继续有效 - 直到您编辑未告诉make
的文件为止,此时您会发现{{1}可能不会费心去重新编译。
答案 1 :(得分:0)
您必须将每个包含文件命名为依赖项,因为(按设计)make并不知道C的工作原理。 gcc和GNU make为此提供了解决方案:
main.x: main.o
gcc -o main.x
main.o main.d: main.c
gcc -MD -MF -MG -MP main.d -c main.c
-include main.d
include
前面的短划线导致make忽略丢失的.d
个文件,-MD
...导致gcc
生成包含依赖关系规则的文件,以便在{ {1}}(make
导致生成作为编译的副作用,-MD
命名文件以将其写入,-MF
导致创建假定的规则,缺少头文件将创建并-MG
为头文件创建虚假目标,因此删除头文件并不会因为缺少依赖性而阻止进一步构建。