Как получить другой тип сборки для c ++ через cmake сразу? - PullRequest
2 голосов
/ 23 марта 2020

У меня есть проект 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
...