在 CMake 中为每个目标设置编译器/链接器标志

Vis*_*rma 3 c c++ cmake

我为我的项目创建了以下 CMakelists.txt,其中包含一些需要用 C 编译的文件,然后与我的 C++ 二进制文件链接。我也在用libasan。

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}")
Run Code Online (Sandbox Code Playgroud)

在上面的文件中,我只有一个目标二进制文件。但现在我想要 2 个二进制文件。一个将使用 libasan 进行编译,另一个将不使用 libasan 进行编译。如何在 'CMAKE_EXE_LINKER_FLAGS' 、 'CMAKE_CXX_FLAGS' 和 'CMAKE_CXX_FLAGS' 中为每个二进制目标使用不同的标志值?

Vis*_*rma 5

好的,在浏览了这里的不同答案之后,我制作了下面给出的 CMakelists.txt 并且它在这种情况下有效。

cmake_minimum_required(VERSION 3.0)

project(ABC_PROXY VERSION 1.0.0 LANGUAGES C CXX)

add_executable(abc_proxy_with_asan
src/file1.c
src/main.cpp
)

set_target_properties(abc_proxy_with_asan PROPERTIES COMPILE_FLAGS "-g3 -fsanitize=address -fno-omit-frame-pointer")
set_target_properties(abc_proxy_with_asan PROPERTIES LINK_FLAGS "-fsanitize=address -static-libasan")
target_include_directories(abc_proxy_with_asan PRIVATE /home/vishal/cpp_file/new /home/vishal/cpp_file/new/framework)

add_executable(abc_proxy
src/file1.c
src/main.cpp
)

set_target_properties(abc_proxy PROPERTIES COMPILE_FLAGS "-g3 -fno-omit-frame-pointer")
target_include_directories(abc_proxy PRIVATE /home/vishal/cpp_file/new /home/vishal/cpp_file/new/framework)
Run Code Online (Sandbox Code Playgroud)