让我们说我想用/W4
编译具有三个库/ target
的项目的所有代码。
A -> B -> C
在整个项目中应用该标志的最佳做法是什么?
我可以想到两种方法:
在TARGET_COMPILE_OPTIONS(C PUBLIC "\W4")
的CMake中设置C
(这是整个项目的核心库),所有依赖于C
的其他库都将通过以下方式继承标志: TARGET_LINK_LIBRARIES(B C)
Pro:新库将自动继承该标志。
Con:项目的编译标志是隐式的。
分别为每个目标/库指定编译选项。
Pro:标志已为每个库明确指定并可以单独管理。
Con:需要为新库设置(不要忘记)标志。
答案 0 :(得分:1)
第三个选项,更改编译器标志。
例如,当我想在整个项目上激活地址清理器时,我会这样做:
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address -static-libasan")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address -static-libasan")
为当前文件夹和子文件夹设置标志的当前惯用方式是
add_compile_options(-fsanitize=address)