2011-07-31 10 views
52

내 프로젝트 루트에 CMakeLists.txt가 있고 my/src 폴더에 CMakeLists.txt가 있습니다./src 폴더에있는 파일에는 .cpp 파일 (set (SOURCEFILES main.cpp foo.cpp))이 포함 된 변수 만 포함되어 있으며 CMakeLists.txt 루트에는 add_subdirectory(src)이 있고 나중에는 add_executable(MyApp ${SOURCEFILES})입니다.cmake 변수 범위, add_subdirectory

하지만 cmake 나에게 오류 인수 잘못된 번호라고

add_executable을 제공

이 어떻게 변수를 볼 수 cmake를받을 수 있나요

제공되지 소스 ? 내가 cmake는 전역 변수를 알고 읽을 수 있지만 그게 set 명령의 문서에서 언급 한 바와 같이

답변

78

... 분명히 그렇지 않다, 각 디렉토리는 add_subdirectory에 추가하거나 function 선언 각 함수는 새 범위를 만듭니다.

새 하위 범위는 부모 범위에서 모든 변수 정의를 상속합니다. set 명령을 사용하는 새 하위 범위의 변수 할당은 PARENT_SCOPE 옵션을 사용하지 않는 한 하위 범위에서만 볼 수 있습니다.

프로젝트의 루트 폴더에 SOURCEFILES 할당이 볼 수 있도록하기 위해, 시도 :

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE) 
+2

감사합니다,이 그것을 해결했다. 그러나 또 다른 참고 사항 : cmake가 이제 부모 범위에 있기 때문에 서브 디렉토리에서'foo.cpp '대신에'$ {CMAKE_CURRENT_SOURCE_DIR}/foo.cpp'를 사용해야합니다. – blubberbernd

+2

또는 add_subdirectory 호출 전에 상위 CMakeLists.txt 파일에서 변수를 설정하고 해당 정의가 하위 CMakeLists 파일로 상속되도록 할 수 있습니다. 다시 말하지만, 여러 CMakeLists 파일에서 파일 이름을 참조해야하는 경우 파일의 이름을 한정해야합니다. – DLRdave

+5

sub-dir/function에서 값을 사용하려면 현재 범위에서도 변수를 만들어야합니다.'set (VAR value PARENT_SCOPE); 세트 (VAR $ {VAR}); ' –