内这是有关scons - always install after buildSCons的安装忽略默认规格脚本
有了scons的2.3.2,我试图让使用SCons来安装被内置到其预先定义的位置,而无需额外的运行命令的目标。上述链接中提出的解决方案对我无效。所以我试图使用默认目标。 假设我的源代码位于src/a
,我安装到/dst-path/a
。在src/a
SConscript(称为从父SConscript)我有:
result = env.MyBuild(some_tgt, some_src)
env.Install('/dst-path/a', result)
如果我输入src/a
scons -u
,它建立但不安装。如果我在相同的位置输入scons -u /dst-path/a
,它将生成并安装。我可以添加env.Alias('install', '/dst-path/a')
,然后安装scons -u install
。这在用户指南中有所描述。但我想只运行scons -u
来构建和安装。
所以我的想法是将/dst-path/a
添加到默认目标,并且只能为可以为该位置生成内容的位置。因此,在src/a
那SConscript,我做
env.Default('/dst-path/a')
from SCons.Script import DEFAULT_TARGETS, BUILD_TARGETS
print "DEFAULT_TARGETS in %s is %s" % (env['MY_SOURCE_DIR'], map(str, DEFAULT_TARGETS))
print " BUILD_TARGETS in %s is %s" % (env['MY_SOURCE_DIR'], map(str, BUILD_TARGETS))
# env['MY_SOURCE_DIR'] tracks current source path and evaluates to 'src/a' in this case
据推测,这相当于我在呼唤scons -u /dst-path/a
现在我删除/dst-path/a
,运行scons -u
而src/a
,看到
DEFAULT_TARGETS in src is []
BUILD_TARGETS in src is []
DEFAULT_TARGETS in src/a is ['/dst-path/a']
BUILD_TARGETS in src/a is ['/dst-path/a']
- 但什么也没有发生! 。但是,如果我跑scons -u /dst-path/a
,我看到
DEFAULT_TARGETS in src is []
BUILD_TARGETS in src is ['/dst-path/a']
DEFAULT_TARGETS in src/a is ['/dst-path/a']
BUILD_TARGETS in src/a is ['/dst-path/a']
- 现在它只是像以前一样制造和安装。我的代码没有效果。
那么,为什么它完全忽略了我的默认规范,即使它甚至使它进入BUILD_TARGETS?这是一个错误吗?
我怎么会迫使SCons安装它一步到位的东西呢?
顺便说一句,不知道是否它很重要,但我也使用VariantDir从源头分离中间文件。
从您的构建的顶级文件夹中调用它时,SCons是否为您做了正确的事情?在讨论这个问题时,我们能否摆脱所有'-u'的东西?如果是,请相应编辑您的问题。它看起来好像这个问题也是相关的http://stackoverflow.com/questions/25560291/how-to-get-scons-install-to-behave-the-same-way-as-build-at-different-层次。 – dirkbaechle
是的,相关 - 我正在采取另一个刺。我需要能够构建(并安装)一个子树,所以我需要使用-u,-U或-D。我在这里发布了一个试探性的答案,但它还不令人满意。 –
如果更改为:install_nodes = env.Install('/ dst-path/a',result)会发生什么情况。 env.Default(install_nodes) – bdbaddog