您需要在 makefile 中包含头文件吗?
Do you need to include header files in a makefile?
bin/queueDriver.o:src/queueDriver.c include/queue.h
${CC} ${CFLAGS} -o bin/queueDriver.o -c src/queueDriver.c
我正在学习 Makefile,此时我真的很困惑。我已经写了一个,现在我在胡闹,我发现如果我拿
/include/queue.h
在我的 makefile 之外,该项目仍然可以正确构建和执行。这是为什么?
make 规则行中冒号后的名称是 dependencies。如果任何依赖项比规则的目标最近被修改,则执行规则。 (目标通常是一个与规则名称相同的文件,但也有例外。)
如果你删除任何依赖项,那么你的目标可能仍然会构建,但即使你更改它所依赖的文件也不会重建它(长期可能会导致更广泛的构建中断,例如,当您尝试 link 将两个从不同版本的头文件构建的对象组合在一起时)。
查找给定源文件所依赖的所有头文件通常不是人力可能的,因此人们通常使用各种辅助工具来自动生成依赖项。注意后面可以添加依赖:
foo.o: foo.c ## Manually written rule
$(CC) -c -o $@ $^
## added later, e.g. by a tool
foo.o: foo.h
foo.o: bar.h
但总而言之,make
是一个非常低级 的构建工具,它通常只用于非常小的项目或用作一些其他构建系统(例如 autotools 或 cmake)。
我猜有些人喜欢旧技术。
make 文件简单地保存如果 a、b、c,如果比 x 新则构建 x。
所以
x: a, b, c
do this
本质上就是结构。
所以只要不修改头文件,去掉头文件就可以了
但请考虑一些其他技术,例如 SCONS,Gradle...
bin/queueDriver.o:src/queueDriver.c include/queue.h
${CC} ${CFLAGS} -o bin/queueDriver.o -c src/queueDriver.c
我正在学习 Makefile,此时我真的很困惑。我已经写了一个,现在我在胡闹,我发现如果我拿
/include/queue.h
在我的 makefile 之外,该项目仍然可以正确构建和执行。这是为什么?
make 规则行中冒号后的名称是 dependencies。如果任何依赖项比规则的目标最近被修改,则执行规则。 (目标通常是一个与规则名称相同的文件,但也有例外。)
如果你删除任何依赖项,那么你的目标可能仍然会构建,但即使你更改它所依赖的文件也不会重建它(长期可能会导致更广泛的构建中断,例如,当您尝试 link 将两个从不同版本的头文件构建的对象组合在一起时)。
查找给定源文件所依赖的所有头文件通常不是人力可能的,因此人们通常使用各种辅助工具来自动生成依赖项。注意后面可以添加依赖:
foo.o: foo.c ## Manually written rule
$(CC) -c -o $@ $^
## added later, e.g. by a tool
foo.o: foo.h
foo.o: bar.h
但总而言之,make
是一个非常低级 的构建工具,它通常只用于非常小的项目或用作一些其他构建系统(例如 autotools 或 cmake)。
我猜有些人喜欢旧技术。
make 文件简单地保存如果 a、b、c,如果比 x 新则构建 x。
所以
x: a, b, c
do this
本质上就是结构。
所以只要不修改头文件,去掉头文件就可以了
但请考虑一些其他技术,例如 SCONS,Gradle...