【发布时间】:2021-10-12 10:04:13
【问题描述】:
我添加了一个我在GCC Options Summary 找到的编译标志,结果发现 GCC 7 不知道那个(我们使用持续集成系统,其中许多版本一个接一个地启动,每个失败都意味着整个构建失败,我们无法构建下一个版本)。
该网站不包含每个选项的版本范围,因此,除了逐个测试每个编译器版本之外,是否有更简单的方法来获取此信息?
【问题讨论】:
标签: gcc g++ compiler-options
我添加了一个我在GCC Options Summary 找到的编译标志,结果发现 GCC 7 不知道那个(我们使用持续集成系统,其中许多版本一个接一个地启动,每个失败都意味着整个构建失败,我们无法构建下一个版本)。
该网站不包含每个选项的版本范围,因此,除了逐个测试每个编译器版本之外,是否有更简单的方法来获取此信息?
【问题讨论】:
标签: gcc g++ compiler-options
创建一个小的有效测试程序并测试它是否使用测试标志编译。如果可以编译,则表示支持该标志。
存在用于简化此类工作的构建系统,例如 CMake check_c_compiler_flag 或 autotools ax_check_compile_flag。
【讨论】:
we use Continuous Integration systems where many versions are started one after the other - 对于每个版本,检查是否支持该标志,并使用它。这样问题就解决了。
strings /usr/bin/gcc | grep -- --flag
right? 嗯,是的。像这样:gitlab.kitware.com/vtk/vtk/-/blob/master/CMake/…。它通常是一个模式check_cxx_copmiler_flag(flag VAR) if (VAR) add_compile_options(flag)。 Often the flags are written in the CMakeLists using generator expressions 通常不使用生成器表达式,除非您正在处理多配置构建生成器。
刚刚找到这个。使用Compiler Explorer:
int main() {}
Add new... > Conformance Viewer 并列出您支持的所有编译器并为每个编译器设置标志。【讨论】: