CMake создает много целей, которые я не указал - PullRequest
0 голосов
/ 11 мая 2019

Я все еще изучаю CMake и использую его в небольшом проекте с библиотекой и тестом (используя Catch2). Моя установка - Windows 10, GCC 6.3.0 с MinGW, CMake 3.13.3 и VSCode с плагином CMakeTools. Структура проекта:

.
+- build
+- doc
+- src
|  +- CMakeLists.txt
|  +- /* .hpp and .cpp sources */
+- test
|  +- CMakeLists.txt
|  +- unit_tests.cpp
+- CMakeLists.txt

Теперь проблема в том, что пока все работает, я получаю множество целей, построенных отдельно от 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/

Они расположены на 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 не смог найти его для запуска тестов; есть ли лучший способ?

1 Ответ

0 голосов
/ 15 мая 2019

Это кажется нормальным, если включить поддержку непрерывной сборки CTest для CTest / CDash.

Этот модуль выполняет несколько действий, включая определение переменной BUILD_TESTING.Важной частью этого модуля является вызов команды enable_testing().

. Затем он включает в себя другие модули, которые создают дополнительные файлы, и некоторые дополнительные пользовательские цели для поддержки непрерывной сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...