gpt4 book ai didi

c++ - CMake:在项目范围内传播编译选项

转载 作者:行者123 更新时间:2023-11-30 04:53:53 29 4
gpt4 key购买 nike

假设我想用 /W4 编译一个项目的所有代码,该项目具有三个库/target

A -> B -> C

在整个项目范围内应用标志的最佳做法是什么?

我可以想到两种方法:

  1. C 的 CMake(这是整个项目的核心库)和所有其他库中设置 TARGET_COMPILE_OPTIONS(C PUBLIC "\W4")依赖于 C 的将通过以下方式继承标志:TARGET_LINK_LIBRARIES(B C)
    Pro:新库将自动继承标志。
    缺点:项目的编译标志是隐式的。

  2. 分别为每个目标/库指定编译选项。
    Pro:每个库的标志都是明确指定和单独管理的。
    缺点:需要(不要忘记)为新库设置标志。

最佳答案

第三个选项,更改编译器标志。

例如,当我想在整个项目上激活地址清理器时,我会这样做:

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) 

关于c++ - CMake:在项目范围内传播编译选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53777186/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com