2014-05-12 1 views
1

다소 복잡한 SConstruct 파일이 있고 설정하므로 여기에 붙여 넣기는 실용적이지 않습니다. scons -j 8을 실행하면 일부 C++ 오류로 인해 빌드가 실패합니다. 그러나, 내가 그냥 scons (그래서, 아무 병렬 내장)와 같은 깨끗한 빌드를 실행하면 다음 컴파일이 잘 끝납니다. 코드가 병렬로 컴파일 될 때만 나타나는 몇 가지 종속성 문제가 있다고 생각합니다. 빌드는 오랜 시간이 걸리므로이 문제를 해결하고 싶습니다.병렬 scons builts를 디버그하는 방법

scons를 디버깅하여 문제가있는 곳을 알려주려면 어떻게해야합니까?

+0

오류가 발생했습니다. 디렉토리 경로 또는 파일이 존재하지 않는다면 비슷한 오류가 발생하고 솔루션을 도울 수 있습니다. – Brady

+0

@ 브래디 : 네 번 예. 우리 코드 중 일부는 서로에 의존하고 scons를 사용하여 컴파일 순서를 결정합니다. scons가 병렬로 실행될 때 그 명령 중 일부는 엉망이됩니다. 적어도 그건 내가 의심하는 것 ... – Sardathrion

답변

2

최근 직장에서 빌드 시스템에서 비슷한 문제가있었습니다. 내가 만난 첫 번째 문제는 매우 이상한 일이었습니다. SCons가 완전히 들어간 디렉토리를 엉망으로 만들고있는 것처럼 보였습니다. SCons 사용자의 메일 링리스트와상의 할 때 os.system('cd ...') 또는 이와 유사한 것으로 변경 디렉토리를 변경할 수 없다는 말을 들었습니다. 병행하여. 필자는 그런 일을 전혀하지 않았지만 추가 검사를 통해 사용자 지정 빌더에서 사용했던 Python shutil.make_archive() 함수가 실제로 디렉토리를 변경하고 있음을 확인했습니다. 이를 변경했을 때 병렬 빌드가 훨씬 잘 작동했습니다. 따라서 사용자 정의 빌더가있는 경우 디렉토리를 변경하지 않아야합니다.

비록 여전히 의존성 시스템이 제대로 작동하지 않았던 것과 비슷한 방식으로 병렬로 빌드하는 동안 문제가 발생했습니다. 나중에 종속성이 원래 의도했던대로 내 잘못이 아니라는 사실을 깨달았습니다. 종속성을 디버깅하는 데 도움이되는 scons --debug=tree 명령 줄 옵션을 사용할 수 있습니다.

원래 SCons에는 병렬 빌드 시스템에 버그가 있다고 생각되었지만 실제로는 매우 견고하고 빌드 스크립트에서 오류가 발생하여 병렬 빌드가 중단된다는 것을 알게되었습니다.