如何在没有自定义代码的情况下从命令行通过 Scons 传递任意编译器 CFLAGS?

2024-03-15

有没有办法写这样的东西:

scons CFLAGS='-fsanitize=address -fsanitize=thread'

这只适用于最小的脚本:

env = Environment()
env.Program(target='main.out', source=['main.c'])

不改变那个脚本?

我知道如何通过修改脚本来做到这一点AddOption + env.Append(CCFLAGS但我想知道是否可以在不更改代码的情况下显式支持它。


我最终选择了:

env = Environment()
env.Append(CCFLAGS='-Werror')
env.Append(CCFLAGS=ARGUMENTS.get('CCFLAGS', ''))
env.Program(target='main.out', source=['main.c'])

可以用作:

scons CCFLAGS='-Wall -pedantic'

并将编译为:

gcc -o main.o -c -Werror -Wall -pedantic main.c

您可能想保留env.Append(CCFLAGS=ARGUMENTS.get('CCFLAGS', ''))行作为最后一次更改CCFLAGS,因为这将允许覆盖命令行上的默认值:GCC 倾向于仅使用最后一个值作为实际值。

TODO:如何使其与变量一起使用?这会更好,因为我们可以获得更多的错误检查和帮助消息生成:

variables = Variables(None, ARGUMENTS)
variables.Add('CCFLAGS', 'my help', '')
env = Environment(variables)
env.Append(CCFLAGS='$CCFLAGS')
env.Append(CCFLAGS=['-Werror'])
env.Program(
    source=['main.c'],
    target='main.out',
)
Help(variables.GenerateHelpText(env))

但这由于引用错误而失败:

gcc -o main.o -c "-Wall -pedantic" -Werror main.c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有自定义代码的情况下从命令行通过 Scons 传递任意编译器 CFLAGS? 的相关文章

  • scons 实用说明(一)

    还在为写一个makefile发愁吗 还在为难记的make参数而苦恼吗 有了scons一切都边的简单了 最近研究了下scons 发现和makefile相比 soncs编译c和c 程序真的太方便了 搞程序什么做好 当然是简单实用最好下面大家就一
  • 如何在 scons 中每次构建后运行一些代码?

    我正在寻找一种方法来注册诸如 scons 中的最终构建回调之类的东西 例如 我现在正在做这样的事情 def print build summary failures SCons Script GetBuildFailures notifyE
  • 从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中

    我有一个分层项目 它使用公共系统目录中的源代码 为此我使用 SConsRepository 函数并希望将所有构建输出 本地代码和从存储库中获取的代码 放置在variant dir中 如果我使用Repository 在简单场景中运行函数 非分
  • 使用 Python subprocess.call() 启动 ncurses 进程

    我正在尝试致电 ct ng http crosstool ng org 来自 SCons SConstruct 脚本 所以基本上来自 Python 使用以下方法 ret subprocess call mnt build pw build
  • 如何根据编译器类型在 C 编译器的 SConstruct 中设置选项?

    我需要为 C 编译器设置附加选项 例如添加标志以打开所有警告 具体取决于编译器的类型 例如 对于 MSVC 我应该使用 env Append CPPFLAGS Wall 但对于 mingw gcc 我需要使用 env Append CCFL
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • 为什么 dlopen 函数内传递的 std::any 的 std::any_cast 会引发错误

    我正在摆弄 c 17 和插件 并且遇到了一个无法解决的错误 在下面的 MWE 中 我可以调用一个本地函数 该函数接受std any 当我尝试阅读内容时 一切都按预期进行 当我通过插件 dlopen 加载这个完全相同的函数时 它正确地看到了a
  • 如何告诉 scons 使用 C++11 标准

    我无法找到如何告诉 scons 接受 c 11 标准 SConstruct 文件 env Environment CPPPATH usr include boost CPPDEFINES LIBS SCONS CXX STANDARD c
  • 如何将 scons 指向安装在我的主目录中的不同编译器?

    我尝试编辑 SConstruct 以指向不同的 gcc 编译器 但它似乎总是使用 usr bin gcc 和 usr bin g 中定义的编译器 env DefaultEnvironment env CC home aaron devel
  • 如何测量 scons 构建的每个组件的构建时间?

    我有一个使用 scons 构建的大型 C 项目 它的构建速度很慢 我想进行一些更改以使其构建速度更快 现在我想集中时间加速构建中最慢的部分 如何找出哪些文件的编译时间最长 我知道这个问题很旧 并且已经被接受 但最近从另一个问题中引用了它 我
  • SCONS 运行目标

    我一直在寻找 寻找 但找不到我的问题的答案 我今晚刚刚开始学习 scons 看起来棒极了 不过我遇到了一点困惑 为了便于开发 我经常喜欢让我的 make 文件构建我的目标 然后运行它 以便我可以通过一次按键来测试更改 这在 make 文件中
  • SCons - 非标准位置的标头/库

    我正在尝试使用 SCons 编译一个程序 该程序需要一组我已安装在非标准位置的依赖项 我已将依赖项安装在 home dja ocr 中 现在我正在尝试编译主程序 但不知道如何告诉 SCons 在哪里查找库和标头 我已经尝试过 除其他外 sc
  • “cl”未被识别为内部或外部命令

    下面是我在 windows7 中运行 scons 编译器时的错误消息 cl is not recognized as an internal or external command operable program or batch fil
  • SCons 不会清除所有文件

    我有一个包含 builds 目录的文件系统 每个目录都包含一个名为 build info xml 的文件 然而 一些构建发生在构建脚本生成 build info xml 之前 因此在这种情况下 我有一个有点不平凡的 SCons SConst
  • SCons 问题 - 不理解 Variables 类

    我正在为一个项目开发 SConstruct 构建文件 并且尝试从选项更新为变量 因为选项已被弃用 我不明白如何使用变量 我有 0 python 经验 这可能是造成这一点的原因 例如 我有这个 opts Variables opts Add
  • 无法运行 scons 并出现导入错误

    我已经安装了 scons 2 3 2 并安装了 python 2 4 当我运行 scons 时 我看到以下错误 scons Import failed Unable to find SCons files in usr bin engine
  • Scons:仅当目标发生更改时才生成版本文件

    我需要从 SCons 脚本生成 version cc 文件 仅当目标的任何源文件发生更改时才应生成此文件 假设 SCons 脚本有以下语句 python function which generates version cc in the
  • 如何在没有自定义代码的情况下从命令行通过 Scons 传递任意编译器 CFLAGS?

    有没有办法写这样的东西 scons CFLAGS fsanitize address fsanitize thread 这只适用于最小的脚本 env Environment env Program target main out sourc
  • SCons 库和子库

    我有一个基于 SCons 的分层构建系统 我有一个根 SConstruct 它调用一个构建共享库的 SConscript 然后调用另一个构建依赖于共享库的可执行文件的 SConscript 所以这是我的问题 我对linux上共享库的理解是
  • 需要帮助调试缓慢的 scons 运行时

    我正在使用 scons 构建两个项目 一个项目效果很好 而另一个 更复杂 项目则非常令人沮丧 这是我在为第二个项目运行 scons 时看到的内容 S time scons scons Reading SConscript files lt

随机推荐