C++ 组织测试项目和主要可执行文件-C&;C++;

C++ 组织测试项目和主要可执行文件-C&;C++;,c++,c,cmake,C++,C,Cmake,我有以下目录结构 root --src ---tests src包含应用程序的源文件和头文件(C文件)。构建此应用程序时,它会生成一个可执行文件测试目录包含应用程序的单元测试用例(C++文件,使用UnitTest++作为测试框架) 在测试项目中,我可以包含src目录中的头文件,编译将通过。连接时出现问题。链接器将无法在源目录中找到对象文件 我怎样才能解决这个问题?在C&C++项目中,对于主应用程序有一个可执行文件,而另一个测试需要同一个源文件一起使用的测试,通常的做法是什么?p> 应用类型:

我有以下目录结构

root
--src
---tests
src
包含应用程序的源文件和头文件(C文件)。构建此应用程序时,它会生成一个可执行文件<代码>测试目录包含应用程序的单元测试用例(C++文件,使用
UnitTest++
作为测试框架)

在测试项目中,我可以包含
src
目录中的头文件,编译将通过。连接时出现问题。链接器将无法在源目录中找到对象文件

我怎样才能解决这个问题?在C&C++项目中,对于主应用程序有一个可执行文件,而另一个测试需要同一个源文件一起使用的测试,通常的做法是什么?p>
  • 应用类型:跨平台
  • 当前开发环境:Linux
  • 构建工具:CMake

任何帮助都会很好

我认为您要么需要在测试项目中编译这些文件,要么在主项目中创建一个lib,您可以将其包括在内。

我一直为此做的是有三个项目。我有一个构建设置,它构建一个静态库,包含我的大部分代码。然后,我将有一个与静态库链接的测试项目和一个包含UI代码的项目,这样的项目通常不会进行单元测试

因为两个项目共享同一个已编译的静态库,所以不需要在项目之间重新编译文件

  • 注意:当我在上面提到“项目”时,我指的是对于您的构建系统具有“项目”范围的任何东西。对于VisualStudio来说,这将是一个proj文件,对于CMake来说,它应该是一个构建目标

是的。我正在考虑在测试项目中编译它们。但这将导致编译两次的文件。这对我来说不太好。然后将要测试的核心代码编译为lib,并从测试项目和主调用代码中调用它。这与我最终使用的方法完全相同。我理解你的观点。从技术上讲,创建一个静态库和链接到它的可执行文件和直接链接到可执行文件的对象文件有什么区别吗?Appu应该没有区别。@John Cage:对不起,我从你的回答中没有理解到这一点。我将+1,因为我不想在这里窃取你的答案,但我确实注意到,花一点时间用通俗易懂的英语写下你的答案,而不是缩写,这对帮助别人理解你有很大帮助。我不会称之为窃取-如果你能更清楚地回答(我认为在这种情况下你做到了),那么你应该去做。SO的全部意义在于,最准确、最清晰、最有用的答案应该浮到顶部。现在重读我的答案,我可以看出它听起来可能有点简短;-)