scons如何在不同的目录中构建SConscript

时间:2017-07-25 02:25:33

标签: scons

目录层次结构如下所示。

├── prog_1
│   ├── hello.c
│   └── SConscript
└── folder
    └── SConstruct

我尝试使用SConstruct在prog_1下构建hello.c,SConstruct如下:

SConscript('../prog_1/SConscript')

prog_1下的SConscript如下:

Program('hello.c')

无论hello.c的绝对路径或相对路径是什么,我都试过但是scons不会识别路径,它只是忽略了prog_1下指定的SConscript并完成了构建过程。是否有任何解决方案让scons进入这样的其他目录(SConstruct的非子目录)?

2 个答案:

答案 0 :(得分:0)

SCons 默认保留在构建项目的顶级文件夹中。它并没有像“ make ”那样“潜入”单个子文件夹。相反,构造所有命令,使得您在SConscript中指定的源文件和目标文件的文件夹相对路径从顶级SConstruct扩展为有效。背景是, SCons 尽可能地避免“chdir”,以便构建可以完全并行运行。

此外,默认情况下, SCons 只会在顶级文件夹或更低级别的文件夹中构建文件,请参阅most frequently-asked frequently asked questions的#2。在您的情况下,这是folder所在的文件夹“SConstruct”。 目标 s“prog_1”和“hello”在此刻“在构建树之外”。

您可以在每次调用SCons时明确指定目标:

scons ../prog_1

,或将“prog_1”文件夹向下移动到“folder”目录。

请阅读User Guide第14章和第15章中的分层和变体版本。

答案 1 :(得分:0)

SConscript('../prog_1/SConscript')

更改prog_1下的SConscript如下:

Default(Program('hello.c'))

假设你在目录"文件夹"中运行scons,SCons默认只会尝试在当前目录或子目录中构建目标。

如果你希望有目标(在兄弟或其他目录树中),你需要在他们的SConscripts(或在SConstruct中)指出这些目标应该默认构建或运行scons为

scons ../prog_1
相关问题