【问题标题】:Scons Hierarchical Builds with Repository directory带有存储库目录的 Scons 分层构建
【发布时间】:2011-05-01 22:00:22
【问题描述】:

我有一个 SCons 项目设置如下:

proj/
    SConstruct
    src/
        c/
        h/
    app1/SConscript
    app2/SConscript
    ...

每个应用程序的所有源/头文件都位于 src/c 和 src/h 中。


  1. 第一步,我在 app1 中创建了一个 SConstruct,它使用了 Repository 函数。

...

src=Split("main.c first.c second.c")

env = Environment(CC='g++', CCFLAGS=['-O0', '-ggdb'], CPPPATH=['.'])

env.Program('appone', src)

存储库("../src/c", "../src/h")

一切正常。 scons 从存储库中找到所有必要的源/头文件来构建 appone 应用程序。


但是,如果我尝试构建 appone 层次结构,它将无法工作:-(

我将 app1/SConstruct 重命名为 app1/SConscript 并放入

SConscript('app1/SConscript')

进入项目/SConstruct

现在我收到以下错误:

scons: *** [app1/main.o] Source `app1/main.c' not found, needed by target `app1/main.o'.

如何配置我的 proj/SConstruct 或 proj/app1/SConscript 以搜索我的 Repository 目录中的所有源文件?

【问题讨论】:

    标签: python scons


    【解决方案1】:

    SCons 正在 app1 目录中寻找您的源文件。如果您这样指定来源:

    src=Split("#main.c #first.c #second.c")
    

    然后 scons 将在存储库中搜索源文件。

    一些额外的想法:

    1. 您可能希望 main.c 位于 app1 目录中,以避免与其他可执行文件的 main.c 发生冲突。在这种情况下,请从源列表中的 main.c 中删除 #。

    2. 如果多个应用程序共享存储库,那么在顶级 SConstruct 中定义存储库可能是个好主意。

    3. 从共享源构建库通常很有用,这样单元测试可以拥有自己的主要功能,但链接与您的应用相同的源(或者应用可以共享公共模块)。将 SConscripts 放在共享存储库目录中以构建公共库可能更容易做到这一点。超出了这个问题的范围,但随着项目的发展需要考虑一些事情。

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      相关资源
      最近更新 更多