오늘 이상한 SCons 동작이 발생합니다.SCons를 사용하여 배열에서 추가/제거하는 이상한 동작
내 문제는 다음과 같습니다 (더 나은 해결 방법이있는 경우 Skons에 익숙하지 않습니다.) SCons 스크립트는 .cu cuda 파일과 .cpp C++ 파일을 작성합니다. 우리가 C++ 11을하고 있기 때문에 C++ 파일을 위해서는 -std = C++ 0x 플래그가 필요하지만 nvcc는 실제로 그 플래그를 좋아하지 않습니다.
그래서 C++ 파일을 컴파일하는 동안 플래그를 임시로 추가하고 cuda 파일을 컴파일하는 동안 제거해야합니다. 내 cpponlyflags
(이 경우 -std=c++0x
) 그래서 추가됩니다 나는 결국 대신이 모든 시간,
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"]
을 기대 :
나는 이런 식으로 뭔가를 시도 내가 defaultLibConstructObjs를 호출 한 횟수가리스트 인 -std=c++0x
.
안녕하세요, 당신은 맞습니다. 나는 파이썬으로 그렇게 많은 경험을하지 못했습니다. 내 잘못이야. 원본 문제 (cf 참조 VS 사본)가있는이 주제를 보는 사람들이 있다면 유용한 링크가 있습니다. http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list- in-python) 감사합니다. – MisterJ
편집 : 내가 추가 한 링크에 언급 된 솔루션 중 아무 것도 작동하지 않습니다. 그것은 SCons와 관련이 있습니까? – MisterJ
심지어 개체 건물 뒤에 단계가있는 경우 : 'if (ext == cpp) : env [ "CPPFLAGS"] = env [ "CPPFLAGS"] [: 1]' 디버그 출력시 cpp 파일을 빌드해야합니다, std = C++ 0x 플래그를 볼 수 있지만 실제 빌드 시간에, 그것은 dissapeared .... 그래서 당신의 다중 env 솔루션은 – MisterJ