У меня есть проект cpp и я использую внешний (git подмодуль) каталог для дезинфицирующего средства. Вот как выглядит мой проект.
├── CMakeLists.txt
├── Dockerfile
├── externals
│ └── sanitizers-cmake
├── jenkins
│ └── submodule
├── Jenkinsfile
├── README.md
├── scripts
│ └── run.sh
└── src
└── main.cpp
Дезинфицирующее средство поступило из внешнего каталога. Вот мой файл cmake
cmake_minimum_required(VERSION 3.10)
project(testproject)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -std=c++17 -Wall -Wextra -Wpedantic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++17 -Wall -Wextra -Wpedantic")
add_executable(intro src/main.cpp)
ADD_CUSTOM_TARGET(debug
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
COMMENT "Switch CMAKE_BUILD_TYPE to Debug"
)
ADD_CUSTOM_TARGET(release
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
COMMENT "Switch CMAKE_BUILD_TYPE to Release"
)
ADD_CUSTOM_TARGET(asanitizer
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=ASAN ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
COMMENT "Switch CMAKE_BUILD_TYPE to Address Sanitizer"
)
include("cmake/cppcheck.cmake")
include("cmake/clang-dev-tools.cmake")
include("cmake/sanitizer.cmake")
Я отредактировал свой CMakeLists.txt и определил три типа отладки, выпуска и очистки адресов. В настоящее время после запуска CMake я могу запустить make с одним из следующих параметров. Моя цель - построить их параллельно и получить все 3 бинарных файла одновременно. В настоящее время я переопределяю их. И я не могу избежать вызова make. Это должно быть просто обработано Cmake
$ make debug | release | asanitizer
Host= Debian 10
Compiler= clang-7
cmake= 3.13
generator= ninja