我的项目中有一个目录树:
/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如何实现这一目标。
答案 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
)