CMAKE_CURRENT_SOURCE_DIR과 CMAKE_CURRENT_LIST_DIR의 차이점


105

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가 파일에서 명령 처리를 완료하면 이전 값을 복원합니다. 따라서 매크로 또는 함수 내의 변수 값은 매크로 또는 함수 정의를 포함하는 파일의 디렉토리가 아니라 호출 스택에서 맨 아래 항목을 호출하는 파일의 디렉토리입니다.

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


10
또한 단순하고 멋진 것과 어떻게 다른 ./가요?
kyb

답변:


139

변수 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현재 처리중인 파일 옆에있는 템플릿 파일이나 배치 스크립트와 같은 리소스 파일을 찾아야 할 때 유용 합니다.


42
+1. CMAKE_CURRENT_LIST_DIR모든 파일에 변경 사항을 추가 합니다 include(). 호출 할 필요가 없습니다 CMakeLists.txt.
문헌 : Angew는 더 이상 자랑 SO의없는

2
여기에 좋은 토론 을 효과적으로 사용하는 방법 CMAKE_CURRENT_LIST_DIRinclude(...)프로젝트이다.
jmcarter9t

1
문서가 암시하는 것보다 CMAKE_CURRENT_SOURCE_DIR더 유사하기 때문에 쉽게 혼동 CMAKE_SOURCE_DIR됩니다.
Malachi

그리고 add_subdirectory()? 두 변수가 폴더를 가리 킵니까?
einpoklum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.