CMakeLists + gtest

时间:2014-08-29 07:13:02

标签: c++ cmake googletest gmock

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

/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如何实现这一目标。

3 个答案:

答案 0 :(得分: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将构建单元测试。

答案 1 :(得分:0)

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

无论如何,如果测试/ CMakeLists.txt是另一个项目(或gtest的一个),你不应该触摸它,而是从CMake add_subdirectory触摸它。

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

答案 2 :(得分: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
)