[cmake] CMAKE_CURRENT_SOURCE_DIR과 CMAKE_CURRENT_LIST_DIR의 차이점

Wiki에서 :

CMAKE_CURRENT_SOURCE_DIR
현재 처리 된 CMakeLists.txt가있는 디렉토리입니다.

CMAKE_CURRENT_LIST_DIR
(2.8.3 이후) 현재 처리중인 목록 파일의 디렉터리입니다.

문서에서 :

CMAKE_CURRENT_SOURCE_DIR : 현재 처리중인 원본 디렉터리의 경로입니다. cmake에서 현재 처리중인 소스 디렉토리의 전체 경로입니다.

CMAKE_CURRENT_LIST_DIR : 현재 처리중인 목록 파일의 전체 디렉토리. CMake가 프로젝트의 목록 파일을 처리 할 때이 변수는 항상 현재 처리중인 목록 파일 (CMAKE_CURRENT_LIST_FILE)이있는 디렉터리로 설정됩니다. 값에는 동적 범위가 있습니다. CMake가 소스 파일에서 명령 처리를 시작하면이 변수가이 파일이있는 디렉토리로 설정됩니다. CMake가 파일에서 명령 처리를 완료하면 이전 값을 복원합니다. 따라서 매크로 또는 함수 내의 변수 값은 매크로 또는 함수 정의를 포함하는 파일의 디렉토리가 아니라 호출 스택에서 맨 아래 항목을 호출하는 파일의 디렉토리입니다.

어떤 상황에서 이러한 변수가 다른 값을 유지합니까?



답변

변수 CMAKE_CURRENT_SOURCE_DIRinclude 명령을 CMAKE_CURRENT_LIST_DIR사용하여 다른 파일에 포함 된 CMake 목록 파일에 대한 다른 디렉터리를 참조 할 수 있습니다 . 예 : a 가 디렉토리에 있고 다음 지시문을 포함하는 경우CMakeLists.txtproject

include(src/CMakeLists.txt)

src/CMakeLists.txt처리되는 동안 은 여전히 외부 디렉토리를 가리키는 반면에 CMAKE_CURRENT_LIST_DIR참조됩니다 .project/srcCMAKE_CURRENT_SOURCE_DIRproject

CMAKE_CURRENT_LIST_DIRCMakeLists.txt현재 처리중인 파일 옆에있는 템플릿 파일이나 배치 스크립트와 같은 리소스 파일을 찾아야 할 때 유용 합니다.


답변