內這是有關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