默認情況下,SCons似乎查看用於構建程序的「配方」,並從中提取隱式依賴關係。例如,假設我的SConstruct包含:如何讓SCons忽略來自命令操作的隱式依賴關係?
Command('foo', 'foocreator.py', '/usr/bin/python foocreator.py > foo')
而且我已經構建了'foo'('foo'是最新的)。 現在我改變SConstruct(或更實際地,通過不同的選擇),以使得關於「富」的命令變爲:
Command('foo', 'foocreator.py', '/usr/bin/qrsh -V -cwd /usr/bin/python foocreator.py > foo')
(換言之,潤透所述SGE腳本foocreator.py) 現在SCons的嘗試重建foo,--debug = explain告訴我這是因爲「/ usr/bin/qrsh的新依賴」和「對/ usr/bin/python的依賴關係」)。
如何防止對配方中的依賴關係進行推斷,最好是全局性的?到目前爲止,我還沒有找到這種行爲的規範。我不想說明'foo'並不是真的依賴python或qrsh,因爲我必須爲每個目標以及這些程序的每個可能位置都做這件事。必須有一個「正確」的方式。
編輯:我現在也嘗試過明確將忽略每一個目標,如:
Ignore('foo', '/usr/bin/python')
Ignore('foo', '/usr/bin/qrsh')
,甚至這也不行! SCons仍然希望在我通過qrsh進行切換時重建所有內容,而不是。
SCons是否總是試圖重建foo,或者在改變Command()動作之後?如果它只是在改變動作之後,那對我來說這聽起來很合理。 – Brady 2012-07-19 15:57:56
@Brady只有當動作「改變」時。即使環境發生變化,使用不同版本的python(或gcc,或其他),它也會這樣做。我同意這種行爲在許多情況下是有用的,我只想知道如何關閉它。 – Joe 2012-07-19 16:24:03