目标我想定义几个目标:
并能很容易地在他们之间切换。例如,我不希望每次切换都重建我的所有对象,(当然,我必须在第一次这样做,但是以后如果我修改了一个文件,并且我做了,然后做了,因为它应该只对每个目标重新编译这个文件)
我到目前为止所做的一切
我已经成功地从根目录创建了这些目标,但是每次我都必须做一个make干净并重新编译。
option(CLANG_MSAN "Enable Clang memory sanitizer" OFF)
if (CLANG_MSAN)
set (CMAKE_CXX_FLAGS "-g -fsanitize=address -fno-omit-frame-pointer")
endif()
add_custom_target(asan
COMMAND ${CMAKE_COMMAND}
-DCLANG_MSAN=ON
-DCMAKE_CXX_COMPILER=clang++
-DCMAKE_C_COMPILER=clang)用CMake可以做这样的事情吗?
发布于 2015-11-19 09:33:09
是的,但是使用多个构建目录:
cmake -DCMAKE_COMPILER=clang -DCMAKE_C_FLAGS="-fsanitize=thread" ..或你问题中的内容。这意味着源代码外的构建,无论如何都是由CMake鼓励的。
发布于 2015-11-19 09:41:28
我相信您应该能够通过ExternalProject模块来实现这一点。您可以添加三个外部项目,一个用于msan,一个用于tsan,另一个用于基本的GCC构建。这两个清理器构建将被标记为EXCLUDE_FROM_ALL 1。
所有三个人的CMakeLists都可以通过include()共享公共部分。
就像这样:
根CMakeLists.txt
ExternalProject_Add(msan
EXCLUDE_FROM_ALL 1
SOURCE_DIR msan
CMAKE_GENERATOR ...
)
ExternalProject_Add(tsan
EXCLUDE_FROM_ALL 1
SOURCE_DIR tsan
CMAKE_GENERATOR ...
)
ExternalProject_Add(normal
SOURCE_DIR src
CMAKE_GENERATOR ...
)src/CMakeLists.txt
include(common.cmake)src/common.cmake
# Normal CMake code for your project
add_library(...)msan/CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address -fno-omit-frame-pointer")
include(../src/common.cmake)https://stackoverflow.com/questions/33799831
复制相似问题