0

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

/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.txtsrc/目录?

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

4

3 回答 3

2

在您的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单元测试,则将构建。

于 2014-08-29T08:36:08.090 回答
0

在你的主要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
)
于 2014-08-29T07:35:57.917 回答
0

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

无论如何,如果 test/CMakeLists.txt 是另一个项目(或gtest的项目),则不应触摸它,而应从 CMake 中添加子目录。

如果该文件包含可重用的功能,那么看看这个答案

于 2014-08-29T07:27:38.713 回答