我仍在学习 CMake,并在一个带有库和测试的小项目中使用它(使用 Catch2)。我的设置是 Windows 10、带有 MinGW 的 GCC 6.3.0、带有 CMakeTools 插件的 CMake 3.13.3 和 VSCode。项目结构:
.
+- build
+- doc
+- src
| +- CMakeLists.txt
| +- /* .hpp and .cpp sources */
+- test
| +- CMakeLists.txt
| +- unit_tests.cpp
+- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
现在的问题是,虽然一切正常,但我得到了一堆与src
和test
目标分开构建的目标:
ContinuousBuild.dir/
ContinuousTest.dir/
ExperimentalMemCheck.dir/
NightlyMemoryCheck.dir/
ContinuousConfigure.dir/
ContinuousUpdate.dir/
ExperimentalStart.dir/
Nightly.dir/
NightlyStart.dir/
ContinuousCoverage.dir/
Experimental.dir/
ExperimentalSubmit.dir/
NightlyBuild.dir/
NightlySubmit.dir/
ContinuousMemCheck.dir/
ExperimentalBuild.dir/
ExperimentalTest.dir/
NightlyConfigure.dir/
NightlyTest.dir/
ContinuousStart.dir/
ExperimentalConfigure.dir/
ExperimentalUpdate.dir/
NightlyCoverage.dir/
NightlyUpdate.dir/
Continuous.dir/
ContinuousSubmit.dir/
ExperimentalCoverage.dir/
NightlyMemCheck.dir/
Run Code Online (Sandbox Code Playgroud)
他们位于build/CMakeFiles/
。我不知道如何摆脱它们?这是我的 3 个 CMakeList.txt 文件的转储:
####################################
# root
####################################
cmake_minimum_required(VERSION 3.5.0)
project(TestProject CXX)
set( CMAKE_CXX_STANDARD 17 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
find_package(Catch2 REQUIRED)
include(Catch)
include(CTest)
add_subdirectory(test)
add_subdirectory(src)
enable_testing()
add_test( ${PROJECT_NAME}_test_all
unit_tests
)
####################################
# ./source
####################################
add_library( my_lib
A.hpp
A.cpp
B.hpp
B.cpp
)
####################################
# ./test
####################################
add_executable(
unit_tests
unit_tests.cpp
)
target_include_directories( unit_tests
PRIVATE ../src/
)
target_link_libraries( unit_tests
my_lib
Catch2::Catch2
)
Run Code Online (Sandbox Code Playgroud)
作为一个附带问题,我必须使用set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
,否则 unit_tests.exe 文件被放入其中build\test
,并且 CMake 无法找到它来运行测试;有没有更好的办法?
您可以set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
在调用enable_testing()
.
添加这些的代码位于CTestTargets.cmake中