CMake 문법 - 빌드 결과 생성 경로 지정하기

반응형

본 글에서는 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)
set(CMAKE_C_STANDARD 99)

set(TARGET hello-world)
set(OUTPUT_DIR ${CMAKE_CURRENT_LIST_DIR}/output)
add_executable(${TARGET} hello-world.c)

set_target_properties(${TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})

 

 

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 버전에서 수행되었다.

 


파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

댓글

Designed by JB FACTORY