Scons Hierarchical与存储库目录构建

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

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

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


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

    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')

    进入proj / SConstruct

    现在我得到以下错误:

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

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


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

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

    那么scons将搜索源文件的存储库。

    一些额外的想法:

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

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

  • 从共享源构建库通常很有用,以便单元测试可以拥有自己的主要功能,但是将相同的源与应用程序链接在一起(或者应用程序可以共享公共模块)。 将SConscripts放入共享库目录来建立公共库可能会更容易。 超出这个问题的范围,但随着项目的增长需要考虑的事情。

  • 链接地址: http://www.djcxy.com/p/67915.html

    上一篇: Scons Hierarchical Builds with Repository directory

    下一篇: time determination of SCons targets