今天我面對一個奇怪的SCons行爲。使用SCons添加/刪除數組的奇怪行爲
我的問題是以下(如果有更好的解決方法,我對SCons來說很新): 我的SCons腳本正在構建.cu cuda文件和.cpp C++文件。對於C++文件,我需要-std = C++ 0x標記,因爲我們正在執行C++ 11,但nvcc並不真的喜歡那個標記。
因此,我需要做的是在編譯C++文件時添加臨時標誌,並在編譯cuda文件時將其刪除。
我想是這樣的:
def defaultLibConstructObjs(self,targetName,env,avoided=[]):
constructedObjects=[]
oldcppflags=env["CPPFLAGS"]
print(env["CPPFLAGS"])
for ext in ["cu","c","cpp"]:
if ext == "cu":
prefix = ext
else:
prefix = ""
if ext == "cpp":
env["CPPFLAGS"]+=env["CPPONLYFLAGS"]
constructedObjects.append(self.constructObjs(targetName,env,ext,prefix,avoided))
env["CPPFLAGS"]=oldcppflags
return constructedObjects
所以我希望env["CPPFLAGS"]
是在每個循環依次不變,但不是每次都是這樣我cpponlyflags
(-std=c++0x
在這種情況下)附加所以我最終與列表中的次數我調用defaultLibConstructObjs -std=c++0x
。
嗨, 你猜對了,我沒有太多的python經驗。我的錯。 如果有人正在用我原來的問題來看這個主題(參考VS副本,這裏是一個有用的鏈接:http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list- in-python) 非常感謝你。 – MisterJ 2014-09-22 07:18:03
編輯:我添加的鏈接中提到的解決方案都沒有工作。這與SCons有關嗎? – MisterJ 2014-09-22 07:26:34
甚至在構建對象後還有一步:if(ext == cpp): env [「CPPFLAGS」] = env [「CPPFLAGS」] [: - 1]' 在我的調試輸出中,當我應該建立cpp文件,我看到std = C++ 0x標誌,但是在實際建造時,它已經消失了......所以我想你的多env解決方案是唯一可行的 – MisterJ 2014-09-22 07:38:08