【发布时间】:2021-05-04 13:00:29
【问题描述】:
我有一个包含多个软件组件(可执行文件、库)的代码库(例如,存储库)。全部都是使用 CMake 构建的,每个组件都有单独的目标。
现在,我知道设置编译器标志的现代方法是针对特定目标的:
target_compile_options(foo PRIVATE -Werror -Wall -Wextra -pedantic)
target_compile_features(foo PRIVATE cxx_std_17)
但是,我希望整个项目中的所有目标都使用相同的标志。为每个单独的目标编写这些行会导致代码重复并且容易出错(尤其是当标志数量增加时)。有没有办法将编译器标志附加到项目而不是目标?
我知道我可以像这样向顶级目录添加选项:
add_compile_options(-Werror -Wall -Wextra -pedantic)
但我不确定这是否可行,而且我不确定如何为编译功能做同样的事情 (cxx_std_17)。
【问题讨论】:
-
您不应该在项目本身中设置警告标志。一方面,它们是特定于编译器的。支持多个编译器的警告标志很快就会变成一堆条件,特别是如果您支持同一编译器的多个版本,这些版本具有您需要禁用的不同警告。相反,您可以使用工具链文件或编译器+编译器版本特定的附加 cmake 脚本,这些脚本通过 -DCMAKE_PROJECT_INCLUDE / -DCMAKE_PROJECT_INCLUDE_BEFORE 注入到您的构建中。
标签: cmake