【问题标题】:CMake testing sources from different folder来自不同文件夹的 CMake 测试源
【发布时间】:2012-11-27 15:30:50
【问题描述】:

我开始使用 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

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

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

编辑:向树中添加类名

【问题讨论】:

  • 致您的 PS:它也适用于单元测试。唯一的区别是编译代码的位置。但这是你的个人喜好

标签: c++ cmake googletest ctest


【解决方案1】:

您可以在根 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 或 library 或其他任何操作。

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

【讨论】:

  • 我想过。但是由于某种原因,当我离开子项目的范围时,ALL_SRCS 会恢复到以前的值。我尝试在每个子目录的末尾和 add_subdirectory() 之后使用 message("SRCS: " ${ALL_SRCS}) 记录它。
  • 我认为这应该会更好,现在,我编辑了全局变量的帖子。但我认为推荐的测试方式仍然是创建一个源库,链接到您的测试用例。
  • 谢谢!有效!还有一件事:我必须将 ${PROJECT_SOURCE_DIR}/src/className.cpp 放在每个文件的前面。是否有可能在没有此前缀的情况下以某种方式使其工作?一种解决方法是循环并为其添加前缀,但它看起来很hacky。
  • 循环添加前缀并不是那么难懂^^。我想不出别的办法了。
  • 好的,我会那样做的。谢谢!
【解决方案2】:

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

【讨论】:

  • include_directories() 包含标题但不链接对象。
  • 使用target_link_libraries(lib_name)
  • 啊,我知道你不想链接到图书馆。就我个人而言,我会采用该解决方案并将任何辅助方法从 .cpp 提取到一个新的头文件中。
  • 如果我将它作为库链接,则测试中的类的依赖项将链接在一起(作为库)。这就是我想要避免的。测试将帮助我查看依赖关系并指出我应该通过引入接口来减少耦合的地方。
猜你喜欢
  • 2019-02-28
  • 2020-11-30
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多