【问题标题】:CMakeLists + gtestCMakeLists + gtest
【发布时间】:2014-08-29 07:13:02
【问题描述】:

我的项目中有一个目录树:

/project
   /build
   /src
         main.cpp
         student.cpp
   /include
         student.hpp
   /test
         main_test.cpp
         CMakeLists.txt
   CMakeLists.txt

我的 gtest 和 gmock 库位于:

/home/karol/Google
              /gtest
              /gmock
              /lib

我想知道是否应该将project/CMakeLists.txt 移动到src/ 目录?

我的目标是在编译二进制文件或单元测试之间做出选择。我想知道 CMakeLists 如何实现这一目标。

【问题讨论】:

  • 您遇到的问题不清楚。你可以选择任何一种方式:将 CMakeLists.txt 留在 project/ 中,将其移动到 project/src/ 或在 project/src/ 中创建一个额外的 CMakeLists.txt。根据您要实现的目标,这些方法中的每一种都可能是最佳解决方案。

标签: c++ cmake googletest gmock


【解决方案1】:

在你的project/CMakeLists.txt 添加:

add_subdirectory  (test)
add_custom_target (testing)
add_dependencies  (testing main_test)

在你的project/test/CMakeList.txt 添加:

add_executable    (main_test EXCLUDE_FROM_ALL main_test.cpp)

现在,如果您只输入 make 将构建二进制文件,但如果您输入 make testing 将构建单元测试。

【讨论】:

    【解决方案2】:

    您的 CMakeLists.txt 文件应保留在项目的根目录中,而不是位于主要来源的文件夹中。您可以通过 CMake 直接指定源和/或项目。

    无论如何,如果 test/CMakeLists.txt 是另一个项目(或 gtest 的项目),您不应该触摸它,而应该使用 CMake 的 add_subdirectory 它。

    如果该文件包含可重用函数,请查看this answer

    【讨论】:

    • 不确定include 是否是添加CMakeLists.txt 的解决方案,而是用于*.cmake 文件
    • @PiotrS。 cmake.org/cmake/help/v2.8.11/cmake.html#command:include -> 文件|模块。无论如何, add_subdirectory 是一个更好的选择(include 应该针对可重用的功能)。我会编辑这个,但我不知道这些文件的性质。
    【解决方案3】:

    在您的主要project/CMakeLists.txt 中,只需使用以下命令:

    add_subdirectory( test )
    

    它将包含test 目录中的所有目标,并且在构建项目时可以访问这些目标。

    现在,假设您的 gmock 目录在您的项目层次结构之外,您应该在您的 project/test/CMakeLists.txt 中执行以下操作:

    add_subdirectory( /home/karol/Google/gmock gmock )
    
    include_directories(
        ${gtest_SOURCE_DIR}/include
        ${gmock_SOURCE_DIR}/include
    )
    
    add_executable(
        test_exec
        test.cpp # list the cpp files with your tests
    )
    
    target_link_libraries(
        test_exec
        gmock_main
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2014-08-31
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多