2016-04-04 42 views
0

我編譯每個文件後生成一些日誌文件。SCons忽略功能不起作用

我通過使用發射器附加到我用來編譯該文件的構建器使SCons知道這些文件。

不幸的是,因爲我在每次構建之後刪除空日誌文件,SCons會重新編譯源文件,因爲缺少日誌文件。

我想使用SCons Ignore函數忽略這些「副作用」文件。

在我發射我做這樣的事情:

def compiler_emitter(target, source, env): 
target.append(env.File(source[0].name.split('.')[0] + env['ERRSUFFIX']))  
env.Ignore(source[0], target[1])  
return target, source 

作爲一個說明,我總是通過只有一個文件到我的建設者。

在我的情況忽略功能不起作用。

以'SCons方式'解決此問題的最佳方法是什麼?

+0

我不明白你爲什麼先加在你的發射器的附加日誌/錯誤文件,但後來想「忽略」他們。如果它們對你的構建不重要,就不要告訴Emitter他們。至少這是我的方法...... – dirkbaechle

回答

1

嘗試使用env.SideEffect()而不是忽略:

SideEffect(side_effect,目標),env.SideEffect(side_effect,目標)

聲明side_effect作爲建築物的副作用目標。這兩個 side_effect和target都可以是列表,文件名或節點。一面 效果是一個目標文件,創建或更新爲 構建其他目標的副作用。例如,Windows PDB文件創建爲 是爲靜態庫構建.obj文件的副作用,並且創建了各種日誌文件,作爲各種TeX 命令的副作用更新。如果目標是多個構建命令的副作用,scons將確保一次只執行一組命令。 因此,您只需要將此方法用於由多個構建命令構建的副作用目標 。

由於多個生成命令可能會更新相同的副作用文件,默認情況下, 當 目標被-c選項刪除時,不會自動刪除side_effect目標。 (但是,請注意, side_effect可能會作爲清理它所在的目錄 的一部分而被刪除。)如果要確保每次清除特定目標時都清除了 ,則必須明確指定此 Clean或env.Clean函數。

http://scons.org/doc/production/HTML/scons-man.html