Scons Hierarchical Builds with Repository目录

时间:2010-10-28 14:09:27

标签: python scons

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

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

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


  1. 第一步,我在app1中创建了一个使用Repository功能的 SConstruct
  2.   

    ...

         

    src = Split(“main.c first.c second.c”)

         

    env =环境(CC ='g ++',CCFLAGS = [' - O0',' - caldb'],CPPPATH = ['。'])

         

    env.Program('appone',src)

         

    存储库(“../ src / c”,“.. / src / h”)

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


    但是,如果我尝试构建appone层次结构,它将不起作用: - (

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

      

    SConscript('app1 / SConscript')

    进入proj / SConstruct

    现在我收到以下错误:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

一些额外的想法:

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

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

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