scons -u和variantdirs

时间:2016-07-11 15:57:06

标签: python c++ build scons

我已经和SCons一起工作了一段时间,而且我遇到了一个我无法解决的问题,我希望有人可以帮助我。我创建了一个虚拟项目,编译一个基本的helloWorld(在main.cpp中)。我想要做的是从' test'中编译我的二进制文件。使用scons -u命令的文件夹。我的所有构建都在一个变量目录中完成,最终将在项目的根目录(构建文件夹)中创建。

这是我的文件夹树:

+sconsTest
       -SConstruct
       + test
                  -SConscript
                  +test2
                             -SConscript
                             -main.cpp
       +build (will eventually be created by scons)

以下是SConstruct代码:

env = Environment()
env.SConscript('test/SConscript', {'env' : env})

以下是test / SConscript代码:

Import('env')

env = env.Clone()

env.SConscript('test2/SConscript', {'env' : env}, variant_dir="#/build", duplicate=0)

以下是test2 / SConscript代码:

Import('env')

env = env.Clone()

prog = env.Program('main', 'main.cpp')

将自己置身于'sconsTest / test'文件夹,我在scons -u中键入,我希望它能够构建我的程序,但是它所说的只是' test'已是最新。什么也没编译。我发现了一些东西,当我从test / SConscript中删除variant_dir和复制args时,scons -u可以工作。

此外,我注意到我可以使用命令

编译程序
scons -u test2

但是,我在一个大型项目中使用scons而且我不喜欢给出一个相对路径作为编译我的项目的参数。我希望scons -u能够自动构建它在子目录中找到的所有东西。

有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Please check the MAN page again. The -u option will only build default targets at or below the current directory. This excludes your folder sconsTest/build when you're in sconsTest/test.

What you are looking for is the -U option (with the capital "U") instead. It builds all default targets that are defined in the SConscript(s) in the current directory, regardless of what directory the resultant targets end up in.