我有一個文件系統,其中包含「構建」目錄,其中每個文件都包含一個名爲「build-info.xml」的文件。然而,一些構建發生在構建腳本生成「build-info.xml」之前,所以在這種情況下,我有一些不重要的SCons SConstruct,用於生成骨架構建信息文件,以便它可以用作進一步規則的依賴。SCons不清理所有文件
即:每個目錄:
- 如果Build-info.xml已經存在,什麼也不做。更重要的是,不要在'scons --clean'上刪除它。
- 如果build-info.xml不存在,生成一個框架 - build-info.xml對任何其他文件沒有依賴關係 - 框架基本上是最小的默認值。 期間--clean
- ,清理積聚info.xml,如果它是產生,否則離開它是。
我SConstruct看起來是這樣的:
def generate_actions_BuildInfoXML(source, target, env, for_signature):
cmd = "python '%s/bin/create-build-info-xml.py' --version $VERSION --path . --output ${TARGET.file}" % (Dir('#').abspath,)
return cmd
bld = Builder(generator = generate_actions_BuildInfoXML, chdir = 1)
env.Append(BUILDERS = { "BuildInfoXML" : bld })
...
# VERSION = some arbitrary string, not important here
# path = filesystem path, set elsewhere
build_info_xml = "%s/build-info.xml" % (path,)
if not os.path.exists(build_info_xml):
env.BuildInfoXML(build_info_xml, None, VERSION = build)
我的問題是, 'scons的--clean' 不會刪除生成的構建-info.xml文件。
我在'if'中玩過env.Clean(t,build_info_xml),但是我無法讓它工作 - 主要是因爲我無法確定分配給't'的東西 - 我想要一個生成的build-info.xml無條件地進行清理,而不是基於另一個目標的清理,而且我無法使其工作。
如果我在'if'之後但在外部嘗試了一個簡單的env.Clean(None,「build_info_xml」),我發現SCons會清理每一個build-info.xml文件,包括那些未生成的文件。也不好。
我想知道什麼是SCons的如何去有關確定哪些文件應該被清理,那些不應該。有沒有什麼有趣的方式,我使用了一個發電機功能,防止SCons將這個目標記錄爲Clean候選人?
進一步就此 - 與上面的規則,scons的--tree =狀態不顯示「顯式生成器」的集結info.xml。它顯示E(存在)和C(當前),但不顯示B(顯式構建器)。這是沒有B的唯一文件,所以也許這就是SCons不清除它的原因。那麼爲什麼env.BuildInfoXML沒有資格作爲「顯式構建器」呢? – meowsqueak 2010-03-18 22:56:07
實際上,如果我手動清理整個環境並運行'scons --tree = status path/to/something/that/depends/on/build-info.xml',我會爲build-info.xml獲得'B' ,並且SCons根據上述規則構建它。但我認爲這個規則具有「無」作爲依賴的事實意味着它不會被添加到清單列表中...... – meowsqueak 2010-03-18 23:13:08