CMake는 프로젝트를 빌드하기 위해 사용되는 강력한 도구이다. 타겟(Target)은 CMake에서 중요한 개념으로, 빌드할 수 있는 실행 파일, 라이브러리 또는 커스텀 명령어 등을 의미한다. 타겟을 생성하고 관리하는 방법은 CMakeLists.txt 파일에서 중요한 부분을 차지한다.

타겟의 기본 개념

CMake에서 타겟은 프로젝트 빌드의 핵심 요소이다. 타겟은 실행 파일, 정적 라이브러리, 동적 라이브러리 등 다양한 형태로 존재할 수 있다. 각 타겟은 독립적으로 빌드되며, 소스 파일 및 의존성을 포함한다.

타겟 생성 명령어

타겟을 생성하기 위해 CMake는 add_executable()add_library() 같은 명령어를 제공한다.

cmake add_executable(MyApp main.cpp utils.cpp)

이 명령어는 MyApp이라는 이름의 실행 파일을 생성한다.

cmake add_library(MyLib STATIC lib.cpp)

위의 예에서는 MyLib이라는 이름의 정적 라이브러리를 생성한다.

타겟 속성 설정

타겟이 생성된 후, 타겟에 여러 가지 속성을 설정할 수 있다. 이는 타겟의 동작을 제어하거나, 추가적인 설정을 적용하는 데 사용된다.

cmake target_include_directories(MyApp PRIVATE include/)

위의 예에서는 MyApp 타겟에 대해 include/ 디렉토리를 포함 경로로 추가한다.

cmake target_link_libraries(MyApp PRIVATE MyLib)

이 명령어는 MyApp 타겟이 MyLib 라이브러리를 링크하도록 설정한다.

타겟 속성의 접근과 수정

CMake에서는 타겟의 다양한 속성을 확인하고 수정할 수 있는 명령어들을 제공한다.

cmake set_target_properties(MyApp PROPERTIES CXX_STANDARD 17)

위의 예에서는 MyApp 타겟이 C++17 표준을 사용하도록 설정한다.

cmake get_target_property(OutputName MyApp OUTPUT_NAME)

이 명령어는 MyApp 타겟의 OUTPUT_NAME 속성을 OutputName 변수에 저장한다.

의존성 관리

타겟 간의 의존성을 관리하는 것은 매우 중요하다. CMake는 이를 자동화할 수 있는 여러 도구를 제공한다.

cmake add_dependencies(MyApp MyLib)

위의 예에서는 MyApp 타겟이 MyLib 타겟에 의존성을 가지며, MyLib이 먼저 빌드되어야 함을 의미한다.

타겟 설치

타겟을 생성한 후, CMake를 통해 설치할 수도 있다.

cmake install(TARGETS MyApp DESTINATION bin)

이 명령어는 MyApp 실행 파일을 bin 디렉토리에 설치한다.


관련 자료: