从不同的文件夹中测试来源

时间:2012-12-10 08:20:34

标签: c++ cmake googletest ctest

我开始玩CMake用Qt创建一个项目并用Google Test测试它。目前,我成功地找到了编译和链接所有必需库的方法。但是,我找不到使用以下项目结构将源链接到测试文件的方法:

root
|
+-- CMakeLists.txt
+-- src
| |
| +-- CMakeLists.txt
| +-- MyClass.h
| +-- MyClass.cpp
|
+-- test
| |
| +-- CMakeLists.txt
| +-- MyClassTest.cpp
|
+-- lib
  |
  +-- gtest-1.6.0
    |
    +-- CMakeLists.txt

Root CMakeLists.txt包含gtest,src和test文件夹的add_subdirectory。我已成功编译并运行“Hello world”应用程序和简单的EXPECT_TRUE(true)测试,以检查每个部分是否正确编译。不幸的是,我找不到将源文件包含在测试中的方法。是否可以使用以下项目结构?

PS我知道可以将我的源代码编译成库并将其链接到测试,但我不喜欢这种方法,因为它更适合集成测试,而不是单元测试......

编辑:在树中添加了类名

2 个答案:

答案 0 :(得分:2)

您可以在根CMakeLists.txt级别添加全局变量:

set(ALL_SRCS CACHE INTERNAL "mydescription" FORCE)

在第一个add_subdirectory(src)中,你可以这样做:

set(ALL_SRCS ${ALL_SRCS} blabla.cpp CACHE INTERNAL "description")

在add_subdirectory(test)中,继续:

set(ALL_SRCS ${ALL_SRCS} bla_test.cpp CACHE INTERNAL "description")

然后,您可以使用所有源文件执行add_executable或库等任务。

编辑:在CMake中为全局变量添加技巧。

答案 1 :(得分:0)

在根CMakeLists.txt中,您可以添加include_directories(src)这也将由测试使用。您可以做的另一件事是在测试CMakeLists.txt中添加include_directories(${<projectName>_SOURCE_DIR}),其中 projectName 是在src / CMakeLists.txt中使用project(myproj)指定的名称(如果您指定了当然还有项目。另请查看docs关于项目