CMake会创建许多我未指定的目标

时间:2019-05-11 10:17:05

标签: cmake

我仍在学习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

现在,问题在于,尽管一切正常,但我得到了除srctest个目标之外的许多目标:

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/

它们位于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
)

作为附带的问题,我不得不使用set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} ),否则将unit_tests.exe文件放在build\test内,而CMake找不到它来运行测试;有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

当包括CTest for CTest / CDash连续构建支持时,这似乎是正常的。

此模块执行一些操作,包括定义BUILD_TESTING变量。该模块的重要部分是调用命令enable_testing()

然后,它包括创建额外文件的其他模块和一些额外的自定义目标,以支持持续的构建支持。

答案 1 :(得分:0)

您可以通过在调用set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)之前在您的CMake代码中的任何地方进行enable_testing()来防止创建这些代码。

添加这些代码的代码位于CTestTargets.cmake