【发布时间】:2018-12-14 09:48:13
【问题描述】:
假设我想为具有三个库/targets 的项目使用 /W4 编译所有代码。
A -> B -> C
在项目范围内应用标志的最佳做法是什么?
我可以想到两种方法:
在
C的 CMake(这是整个项目的核心库)中设置TARGET_COMPILE_OPTIONS(C PUBLIC "\W4")和依赖于C的所有其他库将通过以下方式继承标志:TARGET_LINK_LIBRARIES(B C)
赞成:新库将自动继承该标志。
缺点:项目的编译标志是隐式的。分别为每个目标/lib 指定编译选项。
专业人士:为每个 lib 单独指定和管理标志。
缺点: em> 需要(不要忘记)为新库设置标志。
【问题讨论】:
-
TARGET_LINK_LIBRARIES真的会传播使用TARGET_COMPILE_OPTIONS设置的选项吗? -
@VTT 它传播所有公共和接口(我认为),包括目录,但不知道编译器标志......对我来说似乎很脆弱。
-
我认为它以另一种方式工作。 A需要某个选项,另一个不需要。您必须将 A 的选项传播到 B 和 C 才能链接。