타겟 속성의 개념

CMake에서 타겟(target)은 빌드 시스템이 생성하는 기본적인 개체이다. 타겟은 보통 실행 파일, 라이브러리, 또는 유틸리티가 될 수 있다. CMake는 이러한 타겟에 대해 다양한 속성을 설정할 수 있는 기능을 제공한다. 이 속성들은 타겟의 컴파일, 링크, 설치 등에 관련된 세부 사항을 제어하는 데 사용된다. 이러한 속성을 효과적으로 설정함으로써 빌드 프로세스를 보다 세밀하게 관리할 수 있다.

타겟 속성 설정 방법

타겟 속성은 set_target_properties() 또는 set_property() 명령어를 사용하여 설정할 수 있다. 두 함수 모두 타겟의 속성을 지정하지만, set_target_properties()는 여러 타겟의 속성을 동시에 설정할 수 있고, set_property()는 특정 타겟의 속성에 대해 보다 세밀한 설정이 가능한다.

set_target_properties()

set_target_properties(<target1> [<target2> ...]
                      PROPERTIES <property1> <value1>
                                  <property2> <value2>
                                  ...)

set_target_properties() 명령어는 지정된 타겟들에 대해 여러 속성을 한 번에 설정할 수 있다. 이 명령어는 주로 여러 타겟에 동일한 속성을 적용할 때 유용하다.

set_property()

set_property(TARGET <target> PROPERTY <property> <value>)

set_property() 명령어는 특정 타겟의 하나의 속성을 설정할 때 사용된다. 이 명령어는 개별 타겟에 대해 세밀한 조정을 할 수 있어, 보다 정교한 빌드 구성이 가능한다.

자주 사용하는 타겟 속성

ARCHIVE_OUTPUT_DIRECTORY

ARCHIVE_OUTPUT_DIRECTORY 속성은 정적 라이브러리가 생성될 디렉토리를 지정한다. 이 속성을 통해 빌드 출력물을 특정 위치로 쉽게 정리할 수 있다.

set_target_properties(my_static_lib PROPERTIES
                      ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

RUNTIME_OUTPUT_DIRECTORY

RUNTIME_OUTPUT_DIRECTORY 속성은 실행 파일이 생성될 디렉토리를 지정한다. 이 속성은 주로 윈도우 시스템에서 유용하게 사용된다.

set_target_properties(my_executable PROPERTIES
                      RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

LIBRARY_OUTPUT_DIRECTORY

LIBRARY_OUTPUT_DIRECTORY 속성은 공유 라이브러리 또는 모듈 라이브러리가 생성될 디렉토리를 지정한다. 이 속성을 사용하면 공유 라이브러리를 별도의 디렉토리에 모아서 관리할 수 있다.

set_target_properties(my_shared_lib PROPERTIES
                      LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

COMPILE_DEFINITIONS

COMPILE_DEFINITIONS 속성은 특정 타겟에 대해 컴파일러 정의를 추가할 때 사용된다. 이 속성을 통해 특정 타겟에 대한 전처리기 정의를 간단하게 추가할 수 있다.

set_target_properties(my_target PROPERTIES
                      COMPILE_DEFINITIONS "MY_DEFINE=1")

INCLUDE_DIRECTORIES

INCLUDE_DIRECTORIES 속성은 타겟에 대해 포함 디렉토리를 설정할 때 사용된다. 이 속성을 통해 특정 타겟이 특정 헤더 파일 디렉토리를 포함할 수 있다.

set_target_properties(my_target PROPERTIES
                      INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/include)

타겟 속성 조회 방법

타겟 속성은 get_target_property() 명령어를 사용하여 조회할 수 있다. 이 명령어는 특정 타겟의 특정 속성 값을 반환한다.

get_target_property(var_name my_target PROPERTY <property>)

조회된 속성 값은 var_name 변수에 저장되며, 이후 빌드 과정에서 이 변수를 사용할 수 있다.

타겟 속성의 우선순위

CMake에서 타겟 속성의 우선순위는 여러 요소에 의해 결정된다. set_target_properties()set_property() 명령어로 설정된 속성은 명시적으로 설정된 값이므로 가장 높은 우선순위를 갖는다. 그러나 타겟 속성은 타겟의 링크 단계에서 상속될 수 있으며, 이 경우 우선순위는 타겟 간의 관계에 따라 달라질 수 있다. 따라서 타겟 속성의 설정 시점과 상속 관계를 잘 고려하여야 한다.


관련 자료: - CMake 공식 문서: https://cmake.org/documentation/ - Mastering CMake by Ken Martin, Bill Hoffman