程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了普通 Makefile C++ 项目和单元测试大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决普通 Makefile C++ 项目和单元测试?

开发过程中遇到普通 Makefile C++ 项目和单元测试的问题如何解决?下面主要结合日常开发的经验,给出你关于普通 Makefile C++ 项目和单元测试的解决方法建议,希望对你解决普通 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 行列出了测试的依赖项,其中 LexicalAnalyzerSyntacticanalyzerIntermediateRepresentation 是项目模块。第 4 行将模块依赖项列表转换为该依赖项的目标文件的完整路径。

这种方法似乎适合我的需要,但我不禁觉得它非常@R_829_10197@并且过于依赖文件名。你会如何组织这样的项目?有没有另一种方法可以使用 only 普通 @H_418_13@makefile 来做到这一点?我不确定我能完全解释我所拥有的,但希望这足够了...

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的普通 Makefile C++ 项目和单元测试全部内容,希望文章能够帮你解决普通 Makefile C++ 项目和单元测试所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:普通