目录层次结构如下所示。
├── 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的非子目录)?
答案 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