# 최상위 CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(foo NONE)
message("root directory : ${CMAKE_CURRENT_LIST_DIR}")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") # 모듈 참조 경로 추가
include(mymodule) # 모듈 추가
# cmake/mymodule.cmake, 모듈
# 현재 리스트 파일 경로 출력
# /.../cmake-sources/path-to-module/cmake/mymodule.cmake
message("Full path to module: ${CMAKE_CURRENT_LIST_FILE}")
# 현재 리스트 파일 위치한 디렉터리 경로 출력
# /.../cmake-sources/path-to-module/cmake
message("Module located in directory: ${CMAKE_CURRENT_LIST_DIR}")
# 실행
root directory : /home/red/cgold # root dir path
Full path to module: /home/red/cgold/cmake/mymodule.cmake # 모듈 전체 경로
Module located in directory: /home/red/cgold/cmake # 모듈 디렉터리 경로
-- Configuring done
-- Generating done
-- Build files have been written to: /home/red/cgold/build
CMAKE_CURRENT_LIST_DIR : 현재 리스트 파일의 디렉터리 경로
CMAKE_CURRENT_SOURCE_DIR : 현재 리스트 파일의 소스 디렉터리 경로(소스 트리 구조상 디렉터리 경로)
소스 디렉터리 경로
# CMakeLists.txt, .cmake 안에서 CMAKE_CURRENT_LIST_DIR, CMAKE_CURRENT_SOURCE_DIR 출력
~
Message(STATUS "@@@@@@@@@@@@@@@ ${current} @@@@@@@@@@@@@@@")
message(STATUS "CMAKE_CURRENT_LIST_DIR : ${CMAKE_CURRENT_LIST_DIR}")
# message(STATUS "CMAKE_CURRENT_LIST_FILE : ${CMAKE_CURRENT_LIST_FILE}")
# message(STATUS "CMAKE_CURRENT_LIST_LINE : ${CMAKE_CURRENT_LIST_LINE}")
# message(STATUS "CMAKE_PARENT_LIST_FILE : ${CMAKE_PARENT_LIST_FILE}")
message(STATUS "CMAKE_CURRENT_SOURCE_DIR : ${CMAKE_CURRENT_SOURCE_DIR}")
# message(STATUS "CMAKE_CURRENT_BINARY_DIR : ${CMAKE_CURRENT_BINARY_DIR}")
# message(STATUS "CMAKE_SOURCE_DIR : ${CMAKE_SOURCE_DIR}")
# message(STATUS "CMAKE_BINARY_DIR : ${CMAKE_BINARY_DIR}")
# message(STATUS "PROJECT_SOURCE_DIR : ${PROJECT_SOURCE_DIR}")
# message(STATUS "PROJECT_BINARY_DIR : ${PROJECT_BINARY_DIR}")
~
# 소스 트리 구조
.
├── CMakeLists.txt <-- root
├── bar
│ ├── CMakeLists.txt <-- root/bar
│ └── modules
│ └── bar_module.cmake <-- root/bar/modules
├── main.cc
└── modules
└── root_module.cmake <-- modules/root
3 directories, 6 files
# 실행 1
# 현재 디렉터리와 소스 디렉터리가 같다
-- @@@@@@@@@@@@@@@CMakeLists.txt@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold
# include로 포함된 .cmake 모듈, 새 프로젝트가 생성되지 않고 포함이다
-- @@@@@@@@@@@@@@@modules/root_module.cmake@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold/modules # 현재 .cmake의 디렉터리 경로
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold # 여전히 소스 디렉터리는 root를 가리킨다.
# .cmake는 CMakeLists.txt에 프로젝트로서 포함된 것이 아니다. 단순히 코드를 모아둔 모듈로서 포함된 것이다.
# 따라서 현재 소스 트리 구조상 소드 트리 디렉터리 경로는 root가 된다.
# add_subdirectory로 포함된 모듈, bar라는 새로운 프로젝트가 생성 되었다.
-- @@@@@@@@@@@@@@@root/bar/CMakeLists.txt@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold/bar # 현재 .cmake의 디렉터리 경로
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold/bar # 현재 소스 디렉터리는 bar
# root/bar/CMakeLists.txt가 위치한 소스 디렉터리를 출력하게 된다.
-- @@@@@@@@@@@@@@@root/bar/modules/bar_module.cmake@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold/bar/modules # 현재 .cmake의 디렉터리 경로
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold/bar # 현재 소스 디렉터리는 bar
# bar_module.cmake 역시 include로 포함 되었으며 새 프로젝트를 생성하지 않았기에
# 현재 소스 디렉터리는 root/bar/CMakeLists.txt가 위치한 bar 이다.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/red/cgold/build
$ cmake -B build
실행 2 : 주석 처리한 meesage들을 모두 해제하고 다시 실행
-- @@@@@@@@@@@@@@@root@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold
-- CMAKE_CURRENT_LIST_FILE : /home/red/cgold/CMakeLists.txt
-- CMAKE_CURRENT_LIST_LINE : 8
-- CMAKE_PARENT_LIST_FILE : /home/red/cgold/CMakeLists.txt
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold
-- CMAKE_CURRENT_BINARY_DIR : /home/red/cgold/build
-- CMAKE_SOURCE_DIR : /home/red/cgold
-- CMAKE_BINARY_DIR : /home/red/cgold/build
-- PROJECT_SOURCE_DIR : /home/red/cgold
-- PROJECT_BINARY_DIR : /home/red/cgold/build
-- @@@@@@@@@@@@@@@modules/root@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold/modules
-- CMAKE_CURRENT_LIST_FILE : /home/red/cgold/modules/root_module.cmake
-- CMAKE_CURRENT_LIST_LINE : 5
-- CMAKE_PARENT_LIST_FILE : /home/red/cgold/CMakeLists.txt
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold
-- CMAKE_CURRENT_BINARY_DIR : /home/red/cgold/build
-- CMAKE_SOURCE_DIR : /home/red/cgold
-- CMAKE_BINARY_DIR : /home/red/cgold/build
-- PROJECT_SOURCE_DIR : /home/red/cgold
-- PROJECT_BINARY_DIR : /home/red/cgold/build
-- @@@@@@@@@@@@@@@root/bar@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold/bar
-- CMAKE_CURRENT_LIST_FILE : /home/red/cgold/bar/CMakeLists.txt
-- CMAKE_CURRENT_LIST_LINE : 7
-- CMAKE_PARENT_LIST_FILE : /home/red/cgold/bar/CMakeLists.txt
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold/bar
-- CMAKE_CURRENT_BINARY_DIR : /home/red/cgold/build/bar
-- CMAKE_SOURCE_DIR : /home/red/cgold
-- CMAKE_BINARY_DIR : /home/red/cgold/build
-- PROJECT_SOURCE_DIR : /home/red/cgold/bar
-- PROJECT_BINARY_DIR : /home/red/cgold/build/bar
-- @@@@@@@@@@@@@@@root/bar/modules@@@@@@@@@@@@@@@
-- CMAKE_CURRENT_LIST_DIR : /home/red/cgold/bar/modules
-- CMAKE_CURRENT_LIST_FILE : /home/red/cgold/bar/modules/bar_module.cmake
-- CMAKE_CURRENT_LIST_LINE : 5
-- CMAKE_PARENT_LIST_FILE : /home/red/cgold/bar/CMakeLists.txt
-- CMAKE_CURRENT_SOURCE_DIR : /home/red/cgold/bar
-- CMAKE_CURRENT_BINARY_DIR : /home/red/cgold/build/bar
-- CMAKE_SOURCE_DIR : /home/red/cgold
-- CMAKE_BINARY_DIR : /home/red/cgold/build
-- PROJECT_SOURCE_DIR : /home/red/cgold/bar
-- PROJECT_BINARY_DIR : /home/red/cgold/build/bar
-- Configuring done
-- Generating done
-- Build files have been written to: /home/red/cgold/build