CMake - add_subdirectory

mohadang·2022년 8월 7일
0

CMake

목록 보기
16/24
post-thumbnail

add_subdirectory

  • add_subdirectory 명령어로 로드된 CMakeLists.txt는 소스트리의 노드를 만든다.
  • add_subdirectory는 CMakeLists.txt를 포함하고 있는 하위 디렉터리를 지정한다.
  • 생성된 바이너리 트리 역시 add_subdirectory로 구성된 소스 디렉터리 구조처럼 하위 구조를 가진다.
    • 바이너리 트리는 -B 로 지정한 프로젝트 결과물의 디렉터리 구조를 말한다.
# 예제 디렉 터리 구조

top level
|_foo
|_boo
  |_bar
  |_baz
# CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(foo NONE)

message("Top level CMakeLists.txt")

add_subdirectory(foo)    # 서브 디렉터리 foo 추가
add_subdirectory(boo)    # 서브 디렉터리 boo 추가
# foo/CMakeLists.txt

message("Processing foo/CMakeList.txt")
# boo/CMakeLists.txt

message("Processing boo/CMakeList.txt")

add_subdirectory(baz)
add_subdirectory(bar)
# boo/bar/CMakeLists.txt

message("Processing boo/bar/CMakeLists.txt")
# boo/baz/CMakeLists.txt

message("Processing boo/baz/CMakeLists.txt")
# 실행

[cmake-sources]> rm -rf _builds
[cmake-sources]> cmake -H simple-tree -B _builds
Top level CMakeLists.txt
Processing foo/CMakeList.txt
Processing boo/CMakeList.txt
  Processing boo/baz/CMakeLists.txt
  Processing boo/bar/CMakeLists.txt

-- Configuring done
-- Generating done
-- Build files have been written to: /.../cmake-sources/_builds
$ tree _builds
.
├── CMakeCache.txt
├── CMakeFiles
│   ├── 3.18.2
│   │   └── CMakeSystem.cmake
│   ├── CMakeDirectoryInformation.cmake
│   ├── CMakeOutput.log
│   ├── Makefile.cmake
│   ├── Makefile2
│   ├── TargetDirectories.txt
│   ├── cmake.check_cache
│   └── progress.marks
├── Makefile
├── boo
│   ├── CMakeFiles
│   │   ├── CMakeDirectoryInformation.cmake
│   │   └── progress.marks
│   ├── Makefile
│   ├── bar
│   │   ├── CMakeFiles
│   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   └── progress.marks
│   │   ├── Makefile
│   │   └── cmake_install.cmake
│   ├── baz
│   │   ├── CMakeFiles
│   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   └── progress.marks
│   │   ├── Makefile
│   │   └── cmake_install.cmake
│   └── cmake_install.cmake
├── cmake_install.cmake
└── foo
    ├── CMakeFiles
    │   ├── CMakeDirectoryInformation.cmake
    │   └── progress.marks
    ├── Makefile
    └── cmake_install.cmake

10 directories, 27 files
  • 소스 트리 구조처럼 바이너리 트리 구조도 boo, foo, bar, baz 같은 디렉터리 구조를 가지고 있다
  • 각 서브 디렉터리마다 빌드 할 수 있는 Makefile도 존재한다

소스 트리(-H, -S)

  • CMAKE_CURRENT_SOURCE_DIR : 현재 노드의 전체 경로
  • CMAKE_SOURCE_DIR : 트리의 루트 노드의 전체 경로
    • cmake 실행시 -H, -S 로 소스 트리 루트 경로 설정 가능
# foo/CMakeLists.txt

message("Processing foo/CMakeList.txt")

# /.../cmake-sources/simple-tree-source-vars
message("CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}")

# /.../cmake-sources/simple-tree-source-vars/foo
message("CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")

바이너리 트리(-B)

  • 동일한 구조가 바이터리 트리에 복제 된다
  • CMAKE_CURRENT_BINARY_DIR
  • CMAKE_BINARY_DIR
    • cmake 실행시 -B 로 바이너리 트리 루트 경로 설정 가능
# foo/CMakeLists.txt

message("Processing foo/CMakeList.txt")

# /.../cmake-sources/_builds, 경로가 _builds를 나타낸다
message("CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")

# /.../cmake-sources/_builds/foo, 경로가 _builds를 나타낸다
message("CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}")
profile
mohadang

0개의 댓글