大佬教程收集整理的这篇文章主要介绍了普通 Makefile C++ 项目和单元测试,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在从事一个大型 C++ 项目,该项目恰好有大量的单元测试。随着时间的推移,构建时间开始变得相当长,所以我决定重新组织我的构建策略。我目前正在使用普通的 makefiles,并且我没有计划切换到像 Cmake 这样的东西。
整体组织如下:项目由多个模块组成,模块由多个类组成。这些模块被编译成静态库,然后这些库被链接到项目的应用程序和单元测试。就 @H_418_13@makefile 而言,我在构建模块和应用程序方面没有问题。
最大的挑战在于单元测试:你看,最初,我让测试直接依赖于那些静态库,这意味着任何模块上的任何更改都会导致所有单元正在重建的测试。一开始这不是问题,但很明显,鉴于目前的项目规模,这是不可行的。
经过反复试验,我最终使测试依赖于单个目标文件,这意味着每当模块(及其目标文件)发生变化时,只有依赖于它的测试才会得到重新编译。当然,测试可执行文件必须重新链接(因为它依赖于静态库),但这只是构建所需时间的一小部分整个测试套件。
在大多数情况下,此解决方案有效但它增加了手动列出每个测试的依赖项的负担。下面是如何构建测试的示例:
1 : ...
2 : # Add test dependencIEs here (.cc files only)
3 : MODulES = LexicalAnalyzer Syntacticanalyzer IntermediateRepresentation
4 : MODulES_DEPS = $(addsuffix .o,$(addprefix $(BUILD_TEMp)/,$(MODulES)))
5 :
6 : .PHONY: all
7 :
8 : all: $(OBJ_fileS) $(MODulES_DEPS)
9 :
10: -include $(DEP_fileS)
11: $(BUILD_TEMp)/%.o: $(CURDIR)/%.cc $(MODulES_DEPS)
12: $(CC) $(INCLUDE) $(CPPFLAGS) -MMD -MT"$@" -c $< -o $@
13: ...
需要注意的是,套件中的每个测试文件都有自己的 @H_418_13@makefile(并存储在自己的目录中)。第 3 行列出了测试的依赖项,其中 LexicalAnalyzer
、Syntacticanalyzer
和 IntermediateRepresentation
是项目模块。第 4 行将模块依赖项列表转换为该依赖项的目标文件的完整路径。
这种方法似乎适合我的需要,但我不禁觉得它非常@R_829_10197@并且过于依赖文件名。你会如何组织这样的项目?有没有另一种方法可以使用 only 普通 @H_418_13@makefile 来做到这一点?我不确定我能完全解释我所拥有的,但希望这足够了...
谢谢!
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的普通 Makefile C++ 项目和单元测试全部内容,希望文章能够帮你解决普通 Makefile C++ 项目和单元测试所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。