【问题标题】:How to manage importing an SCons project如何管理导入 SCons 项目
【发布时间】:2020-08-04 06:21:16
【问题描述】:

我有一个基于 SCons 的项目,它有一个相当专业的 SConstruct 文件(由于 CUDA),我们称之为项目 A。我将它用作我正在处理的另一个项目的子模块,我们可以将项目 B 称为还会有一些相当特殊的编译要求(由于 MEX)。

我希望项目 A 保持不变,因为它是我小组中的一个通用库。如何让项目 B 获取“编译通过”所需的所有包含、库等信息。在 CMake 中,这实际上只是 add_subdirectory()target_link_libraries() 的组合。 SCons 中是否有等效的概念,还是 SConstruct 更严格地独立(不能被另一个 SConstruct 调用)?

【问题讨论】:

    标签: c++ build scons


    【解决方案1】:

    评论太长了,不确定是不是“答案”...

    SConstructs 是独特的顶级事物,但话又说回来,它们也不是 - 当您调用 SConscript() 时,您可以调用任何文件,包括一个名为 subdir/SConstruct 的文件,只要后者的结构以某种方式这是有道理的,并且有一个Export() 的东西会被称为它的项目会对Import()ing 感兴趣。

    也没有什么可以阻止你为 A 编写一个真正最小的 SConstruct,它做一些可能是独立构建 A 所独有的事情,所有真正的(常见的)工作都由 SConscript 完成A 的 SConstruct 调用哪个,B 的 SConstruct 也可以调用哪个。

    或者,您可以向 A 添加一个步骤,将您认为项目 B 需要的所有变量信息写入文件,例如以赋值语句的形式 exports.py,然后让 B 通过 Variables(files="exports.py") 调用将其读入- 这有点像 ExportImport 但跨越了 scons 调用的边界。如果该文件不存在,假设您必须调用 scons 来运行 A 的构建,因此该文件用作两个独立构建的同步点。

    如果您编写一个脚本来调用,它将 A 中的信息转换为 B 可以使用的表单,您也可以使用 ParseConfig 函数做一些事情。

    所有这些确实意味着一些对A的构建进行了更改。从 A 的角度来看,它们应该是无害的:写入文件或导出一些变量是一次性操作,除非有人在监听这些操作 - 假设 A 的构建是适当干净的。

    也许这里的一些想法(尽管不完全相同)可能适用? https://github.com/SCons/scons/wiki/SconstructMultiple

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2016-02-01
      • 2012-04-03
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多