gpt4 book ai didi

c++ - MAKEFILE:在不修改文件的情况下将目标视为已更新

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:47 25 4
gpt4 key购买 nike

如何让 GNU make 在不修改目标文件(无配方主体)的情况下将目标视为已修改?

我有一个包含另一个头文件的头文件。

程序.h:

//include guard    

#include "dependencies.h"

//some actual signatures

和生成文件:

program: program.o dependencies.o
g++ -o program program.o dependencies.o

program.o: program.cpp program.h
g++ -c program.cpp

dependencies.o: dependencies.cpp dependencies.h
g++ -c dependencies.cpp

program.h: dependencies.h
# I would like that this target was treated as modified after
# dependencies.h changes

在上面的示例中,当 dependencies.h 仅更改 dependencies.o 时,将重新编译而 program.o 保持不变,因此构建可能会失败。是否可以改变这种行为?

谢谢。

阿莱克

最佳答案

更改这些行:

program.o: program.cpp program.h
g++ -c program.cpp

dependencies.o: dependencies.cpp dependencies.h
g++ -c dependencies.cpp

成为:

OBJ_FILES = program.o dependencies.o
DEP_FILES = $(patsbust %.o,%.d,$(OBJ_FILES))

%.o : %.cpp
g++ -c $< -MP -MMD -MF $(@:.o=.d) -o $@

program : $(OBJ_FILES)
g++ -o $@ $^

-include $(DEP_FILES)

这将使 g++ 为您自动生成您的依赖文件(到 .d)文件。这些文件将具有 makefile 样式的依赖关系规则。在这种情况下,我希望:

program.o : dependencies.h

-include 会将这些添加到您的 makefile 中。这样,您就不必对依赖项进行硬编码 - 让编译器为您解决!

关于c++ - MAKEFILE:在不修改文件的情况下将目标视为已更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com