实际上我有一个库'cryptopp',我想要的是当我对文件进行任何更改并发出make
命令时,它应该处理源目录中任何文件中所做的更改。好吧,cryptoopp的GNUMake文件负责处理'.cpp'文件中的'if',而不是'.h'文件中的更改。
因此,我可以在cryptopp的'GNUMakefile'中进行哪些更改,以便查看所有已修改的头文件,并重新编译依赖于'modified'头文件的所有文件。
答案 0 :(得分:5)
如果使用g ++构建,可以让g ++生成依赖makefile。 您可以将它们包含在主makefile中。
使用-M和-M *参数来使用此功能。 (见http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Preprocessor-Options.html#Preprocessor-Options)
答案 1 :(得分:2)
您必须将所有依赖项添加到Makefile:
mycode.o: mycode.cpp mycode.h somelib.h resources.h
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCLUDES)
如果您已经拥有通用模式匹配命令行,则不必再次说出该命令,您只需列出依赖项:
%o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCLUDES)
mycode.o: mycode.cpp mycode.h somelib.h resources.h
yourcode.o: yourcode.cpp yourcode.h mycode.h somethingelse.h
# ...
总的来说,这是一个糟糕而难以捉摸的混乱局面。您几乎肯定希望更高级别的构建系统为您生成Makefile。即使对于非常小的项目,在Makefile中保持头部依赖关系是最新的也是如此痛苦,以至于它根本不值得。
有几种流行的可移植构建环境。我个人非常喜欢cmake
,包括发现,如果您更改了构建设置(例如从Debug到Release),并且将始终构建所有必需的文件(例如,如果您更改了cmake主文件并键入“make “它会先自动为你再次运行cmake。”
对于纯Unix解决方案,您可以尝试makedepend
,或臭名昭着的autotools
,尽管这是另一个令人头痛的问题......
答案 2 :(得分:2)
如果系统上安装了'makedepend',您可以尝试'makedepend'。最简单的方法是将目标添加到makefile中。类似的东西:
depend:
makedepend *.cc
您可能必须将'* .cc'替换为源文件列表。然后,您可以使用'make depend'命令重新生成所有依赖项。您可能希望将错误消息重定向到/ dev / null,因为它似乎总是会产生很多噪音。