CMake 测试来自不同文件夹的源

CMake testing sources from different folder

本文关键字:文件夹 测试 CMake      更新时间:2023-10-16

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

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

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

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

编辑:将类名添加到树中

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

set(ALL_SRCS CACHE INTERNAL "mydescription" FORCE)

在第一个add_subdirectory(src)中,您可以执行以下操作:

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

在add_subdirectory(测试)中,您继续:

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

然后,您可以对所有源文件执行、add_executable或库或其他操作。

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

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