我已经为我的项目创建了以下 CMakelists.txt 文件,其中包含需要使用 C 编译的一些文件,然后将与我的 C++ 二进制文件链接。我还在使用 libasan。
在上述文件中,我只有一个目标二进制文件。但现在我想要有两个二进制文件。其中一个将使用libasan编译,另一个将不使用它进行编译。如何为每个二进制目标使用不同的'CMAKE_EXE_LINKER_FLAGS'、'CMAKE_CXX_FLAGS'和'CMAKE_C_FLAGS'标志值?
cmake_minimum_required(VERSION 3.0)
SET(GCC_COVERAGE_COMPILE_FLAGS "-g3 -fsanitize=address -fno-omit-frame-pointer")
SET(GCC_COVERAGE_LINK_FLAGS "-fsanitize=address -static-libasan")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
project(ABC_PROXY VERSION 1.0.0 LANGUAGES C CXX)
add_executable(abc_proxy
src/file1.c
src/main.cpp
)
target_include_directories(abc_proxy PRIVATE /home/vishal/cpp_file/new /home/vishal/cpp_file/new/framework)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
在上述文件中,我只有一个目标二进制文件。但现在我想要有两个二进制文件。其中一个将使用libasan编译,另一个将不使用它进行编译。如何为每个二进制目标使用不同的'CMAKE_EXE_LINKER_FLAGS'、'CMAKE_CXX_FLAGS'和'CMAKE_C_FLAGS'标志值?
if(CMAKE_COMPILER_ID STREQUAL "GNU") target_compile_flags(<flags for GNU compiler>) elseif(CMAKE_COMPILER_ID STREQUAL "MSVC") target_compile_flags(<flags for msvc compiler>) etc...
or with generator experssionstarget_compile_flags($<$<C_COMPILER_ID,GNU>:-flag for gnu>)
- KamilCuktarget_compile_flags($<$<COMPILE_LANGUAGE:C>:-flag_for_c> $<$<COMPILE_LANGUAGE:CXX>:-flag for cxx>)
。 - KamilCuk