CMake 문법 - 빌드 결과 생성 경로 지정하기
- 개발환경/CMake
- 2019. 9. 7.
본 글에서는 CMake 기반 빌드 환경에서,
빌드 되는 결과 파일들이 생성되는 경로를 지정하는 방법에 대해 소개한다.
예를 들어, hello-world.c 라는 파일을 빌드하면 hello-world 라는 실행 파일이 생성될 경우, 해당 실행 파일이 output/ 과 같은 특정 디렉토리에 생성되도록 하는 방법이다.
이를 위해 CMakeLists.txt 파일에서 set_target_properties() 라는 커맨드를 사용할 수 있다.
CMake 공식 홈페이지에서는 해당 커맨드에 대해 다음과 같이 설명하고 있다.
Targets can have properties that affect how they are built. set_target_properties(target1 target2 ...PROPERTIES prop1 value1 prop2 value2 ...) |
즉 타겟(빌드 결과)에 대해 다양항 property(속성)을 설정해 주는 커맨드인데, 해당 커맨드를 이용하여 타겟의 생성 경로 속성을 설정해 주는 것이다.
1. 런타임 파일의 생성 경로 지정
RUNTIME_OUTPUT_DIRECTORY 라는 property를 사용하여 지정할 수 있다.
해당 property는 다음과 같은 런타임 파일 형식에 사용된다.
- add_executable() 커맨드를 통해 빌드되는 실행파일(예: *.exe)의 생성 경로를 지정한다.
- DLL 플랫폼의 경우: SHARED 옵션의 add_library() 커맨드를 통해 빌드되는 실행파일(예: *.dll)의 생성 경로를 지정한다.
다음은 런타임 파일의 생성 경로를 지정해 주는 CMakeLists.txt 의 예시이다.
cmake_minimum_required(VERSION 3.13) project(hello-world) |
2. 아카이브 파일의 생성 경로 지정
ARCHIVE_OUTPUT_DIRECTORY 라는 property를 사용하여 지정할 수 있다.
해당 property는 다음과 같은 아카이브 파일 형식에 사용된다.
- STATIC 옵션의 add_library() 커맨드를 통해 빌드되는 정적 라이브러리 파일(예: *.lib, *.a)의 생성 경로를 지정한다.
- DLL 플랫폼의 경우: SHARED 옵션의 add_library() 커맨드를 통해 빌드되는 import 라이브러리 파일(예: *.lib)의 생성 경로를 지정한다.
- DLL 플랫폼의 경우: add_executable() 커맨드를 통해 빌드되는 import 라이브러리 파일(예: *.lib)의 생성 경로를 지정한다. (해당 타겟의 ENABLE_EXPORTS property가 설정되어 있는 경우)
다음은 아카이브 파일의 생성 경로를 지정해 주는 CMakeLists.txt 의 예시이다.
cmake_minimum_required(VERSION 3.13) project(hello-world) set(CMAKE_C_STANDARD 99)
set(TARGET hello-world) set(OUTPUT_DIR ${CMAKE_CURRENT_LIST_DIR}/output) add_library(${TARGET} STATIC hello-world.c)
set_target_properties(${TARGET} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIR}) |
3. 라이브러리 파일의 생성 경로 지정
LIBRARY_OUTPUT_DIRECTORY 라는 property를 사용하여 지정할 수 있다.
해당 property는 다음과 같은 라이브러리 파일 형식에 사용된다.
- MODULE 옵션의 add_library() 커맨드를 통해 빌드되는 모듈파일(예: *.dll, *.so)의 생성 경로를 지정한다.
- 비 DLL 플랫폼의 경우: SHARED 옵션의 add_library() 커맨드를 통해 빌드되는 공유 라이브러리 파일(예: *.so, *.dylib)의 생성 경로를 지정한다.
다음은 라이브러리 파일의 생성 경로를 지정해 주는 CMakeLists.txt 의 예시이다.
cmake_minimum_required(VERSION 3.13) project(hello-world) set(CMAKE_C_STANDARD 99)
set(TARGET hello-world) set(OUTPUT_DIR ${CMAKE_CURRENT_LIST_DIR}/output) add_library(${TARGET} SHARED hello-world.c)
set_target_properties(${TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR}) |
참고: 본 포스트 내용에 대한 테스트는 cmake 3.15.2 버전에서 수행되었다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'개발환경 > CMake' 카테고리의 다른 글
CMake를 이용한 C 언어 프로그래밍 #3: 라이브러리 (0) | 2020.12.24 |
---|---|
리눅스에 CMake 설치하기 : 3.18.0 버전 (0) | 2020.07.26 |
리눅스에 CMake 설치하기 : 3.17.3 버전 (0) | 2020.07.26 |
CMake를 이용한 C 언어 프로그래밍 #2 : 컴파일 정의(definition) 추가하기 (0) | 2020.06.11 |
CMake 커맨드: 이것저것 (0) | 2020.06.07 |
CMake 커맨드: OPTION (0) | 2020.06.07 |
CMake를 이용한 C 언어 프로그래밍 #1 : Hello world (0) | 2020.05.15 |
리눅스에 CMake 설치하기 (0) | 2019.08.02 |