问题标签 [scons]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1568 浏览

c++ - scons 在一个模块中设置 CXXFLAGS 会影响另一个模块

在 dirA/SConscript 我有:

在 dirB/SConscript 我有

现在,被编译的 dirB 中的 c++ 文件从 dirA 获取 CXXFLAGS - 怎么会?CCFLAGS 不会发生这种情况。probeenv['CXXFLAGS'] = ['-fno-rtti','-Wnon-virtual-dtor']如果我在 dirA 中使用也不会发生

0 投票
0 回答
281 浏览

scons - 有人使用 libtool 作为 scons 的后端吗?

我对例子感兴趣。

0 投票
2 回答
797 浏览

python - 从 Scons 控制 distutils

我有一个使用 Scons 构建的 C++ 库,该库最终链接到(除其他外)一个 Python 扩展。

一旦我用 scons 构建了库,我就编写了一个标准的 setup.py 脚本,我调用它来构建和安装扩展。

我的主要问题是 setup.py 无法识别何时重建库(仅当扩展的代码已更改时),因此每次重建库时,我都必须在再次构建之前“清理”扩展。此外,如果我更改目录结构,我宁愿只需要编辑 Scons 文件。最后,只需要调用 scons 而不是除了 setup.py 之外还必须调用 scons 会稍微方便一些。

有谁知道将 distutils 集成到 Scons 中的方法,以便它可以利用 Scons 关于哪些文件需要重建的知识?

0 投票
1 回答
361 浏览

scons - scons:非依赖行为(“幻像目标”?)

我不太确定如何做到这一点......

我想在 SConscript 文件中声明某种操作:

在 SConstruct 文件中:

这样我就可以在命令行输入

它会运行

我似乎无法做到这一点...... scons 想要进行依赖性检查,在这种情况下我不想这样做:/

0 投票
1 回答
1005 浏览

c++ - 使用 msys 在 Windows 上运行 scons LIBPATH

我正在使用LLVM开发一个 C++ 项目,我想用 scons 替换 LLVM 构建系统(使用 autoconf 和 make)。不幸的是,我现在遇到了一个大问题。我希望我的项目能够在 Linux 和 Windows 上编译。为了在 Windows 上编译,我使用了 mingw/msys,它与 autoconf/make 系统完美配合。

然而,scons 修改了我的库路径并在其前面加上了驱动器号,即当我指定/usr/local/lib传递给链接器的实际参数时,-LD:\usr\local\lib它显然不包含我需要的库。我通过以下方式设置库路径:

env['LIBPATH']仍然包含正确的路径。

有什么办法可以防止 scons 弄乱那条路吗?

谢谢

0 投票
1 回答
1213 浏览

scons - SCons:复制外部库以构建输出目录

我们在 Mac、Linux 和 Windows 上使用 SCons + swtoolkit 构建系统。我们有一个 svn 存储库,其中包含我们所有的外部库依赖项,其路径位于环境变量 EXTERNAL_SDKS 中。

在我们的每个目标 SConscripts 中,我想找到一个方法来查找目标链接到的 EXTERNAL_SDKS 路径下的库,并在目标本身构建并放置在那里时将其复制到构建输出文件夹中。

我发现了一种使用 swtoolkit 中添加的组件的方法,但它会减慢 sconscripts 的解析速度(mac 上 15 秒以上,windows 上 1 分钟以上!!)。

有谁知道这样做的有效方法?

0 投票
4 回答
19226 浏览

c++ - 如何设置 scons 系统包含路径

使用 scons 我可以轻松设置我的包含路径:

这通过了标志

到 gcc

但是我正在尝试编译启用了很多警告。特别是与

在某些提升包含中可怕地死去......我可以通过将提升包含添加到系统包含路径而不是包含路径来解决这个问题,因为 gcc 对待系统包含的方式不同。

所以我需要传递给 gcc 而不是 -Ifoo 的是

我想我可以使用 CPPFLAGS 变量来做到这一点,但我想知道 scons 中是否有更好的解决方案。

0 投票
3 回答
2790 浏览

scons - 找出构建的目标平台?

我如何找出 SCons 正在构建的平台(Linux、Mac OS X、Windows 等——不关心架构)。

0 投票
2 回答
2201 浏览

build - SCons:如何为程序的多个变体(发布/调试)使用相同的构建器

SCons 用户指南讲述了使用多个构建环境来构建单个程序的多个版本,并给出了以下示例:

而不是手动为使用不同环境编译的对象分配不同的名称,VariantDir()/variant_dir听起来是一个更好的解决方案......

但是,如果我将Program()构建器放在 SConscript 中:

如何将不同的环境导出到同一个 SConscript 文件?

不幸的是,SCons Wiki中的讨论并没有为这个主题带来更多的洞察力。

感谢您的输入!

0 投票
1 回答
5249 浏览

generator - SCons 不会清理所有文件

我有一个包含“builds”目录的文件系统,每个目录都包含一个名为“build-info.xml”的文件。然而,一些构建发生在构建脚本生成“build-info.xml”之前,所以在这种情况下,我有一个有点不平凡的 SCons SConstruct,用于生成骨架 build-info.xml,以便它可以用作对进一步规则的依赖。

即:对于每个目录:

  • 如果 build-info.xml 已经存在,什么也不做。更重要的是,不要在 'scons --clean' 上删除它。
  • 如果 build-info.xml 不存在,则生成一个骨架 - build-info.xml 不依赖于任何其他文件 - 骨架本质上是最小的默认值。
  • 在 --clean 期间,如果 build-info.xml 是生成的,则删除它,否则保留它。

我的 SConstruct 看起来像这样:

我的问题是 'scons --clean' 不会删除生成的 build-info.xml 文件。

我在'if'中玩弄了 env.Clean(t, build_info_xml) 但我无法让它工作 - 主要是因为我无法确定分配给't'的内容 - 我想要一个生成的构建信息。 xml 被无条件地清理,而不是基于另一个目标的清理,我无法让它工作。

如果我在“if”之后但在“if”之外尝试了一个简单的 env.Clean(None, "build_info_xml"),我发现 SCons 会清理每个 build-info.xml 文件,包括那些未生成的文件。也不好。

我想知道的是 SCons 如何确定哪些文件应该被清理,哪些文件不应该被清理。我使用生成器函数阻止 SCons 将此目标记录为 Clean 候选者的方式有什么有趣的地方吗?