gpt4 book ai didi

visual-studio - 使用 SCons TryCompile 检查 Windows 上的编译器标志支持

转载 作者:行者123 更新时间:2023-12-04 06:03:33 24 4
gpt4 key购买 nike

使用 GCC 和 clang,我已经能够使用 SCons 的“TryCompile”功能来构建一个简单的配置检查,以确定当前配置的编译器是否支持给定的编译标志。基本上,克隆 env,将有问题的标志添加到 CFLAGS、CCFLAGS 或 CXXFLAGS,视情况而定,执行 TryCompile,如果 TryCompile 成功,则支持该标志,我们可以将其添加到真实的 env 中。

  • 这与 gcc 完美配合,因为未知标志是错误并且编译器以非零状态退出。
  • 使用 clang,它也能正常工作:clang 默认情况下将未知错误视为警告,但如果您通过 -Werror 它将把未知标志转换为错误。所以我在 TryCompile 周围的包装器总是传递 -Werror 以及要测试的标志,如果它知道我们正在使用 clang。

  • 然而,这一切都与 Microsoft 工具链有关,因为据我所知,没有办法说服编译器将未知标志视为错误:它们始终是警告,即使您传递标志来产生警告错误。由于编译完全退出,无论标志是否被接受,TryCompile 总是成功。见 this question有关我为让 MSVC 以非零状态退出所做的各种尝试的详细信息。

    关于如何使这项工作有任何想法?是否有另一个我忽略的 SCons 设施可以为我完成这项工作?我应该在 MS 平台上插入 TryCompile 并解析编译器输出而不是检查退出状态。我真的很高兴使用 TryCompile 来配置带有 clang 和 gcc 的时间标志检测,但是如果我不能让 MSVC 合作,我将需要放弃整个方法,而且我非常不愿意这样做,因为到目前为止,它运行良好。

    最佳答案

    把它留给 Windows 再一次在游行中下雨:) 显然,无论发生什么,Windows 编译器总是返回成功。

    我可以想到几个您可以尝试的选项。

    首先,SCons 提供了一个 Multi-Platform Configuration (Autoconf Functionality)这可能会帮助您获得相同的结果。它不包括任何编译器选项,但至少包括以下内容:

  • 检查头文件是否存在
  • 检查函数的可用性
  • 检查库的可用性
  • 检查 typedef 的可用性
  • 添加您自己的自定义检查

  • 另一种选择是使用 Microsoft 编译选项构建某种字典。每个编译器版本可能需要一本字典。这个特定的选项可能需要很长时间来准备,而且可能不值得。

    另一种选择是使用 Object() 或 Program() 构建器而不是 TryCompile() 构建器,并 try catch 失败并做出相应的 react 。我不确定 SCons 是否允许您将编译失败作为异常捕获并在失败时继续进行,但值得检查。

    关于visual-studio - 使用 SCons TryCompile 检查 Windows 上的编译器标志支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274521/

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