프로젝트 설정

CMakeLists.txt 파일의 시작 부분에서는 프로젝트의 이름과 최소 요구 CMake 버전을 지정한다. 프로젝트 이름은 project() 명령어를 사용하여 설정하며, 최소 CMake 버전은 cmake_minimum_required() 명령어로 지정한다.

cmake_minimum_required(VERSION 3.10)
project(MyProject)

패키지 구성

CMake를 사용하여 패키지를 구성하려면 패키지 설정 파일과 설치 규칙을 정의해야 한다. 이는 프로젝트를 다른 곳에 배포하거나, 다른 프로젝트에서 재사용할 수 있도록 하기 위함이다.

패키지 구성 파일 생성

패키지 구성 파일은 보통 Config.cmake라는 이름으로 생성된다. 이를 위해 install() 명령어를 사용하여 패키지 설정 파일을 지정된 위치에 설치할 수 있다. 일반적으로 패키지 구성 파일은 CMakePackageConfigHelpers 모듈을 사용하여 생성한다.

include(CMakePackageConfigHelpers)

configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfig.cmake"
    INSTALL_DESTINATION lib/cmake/MyProject
)

패키지 버전 파일 생성

패키지 버전을 관리하기 위해 버전 파일을 생성할 수 있다. write_basic_package_version_file() 명령어를 사용하여 패키지 버전 파일을 생성하고 설치할 수 있다.

write_basic_package_version_file(
    "${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfigVersion.cmake"
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY AnyNewerVersion
)

install(
    FILES "${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfigVersion.cmake"
    DESTINATION lib/cmake/MyProject
)

설치 규칙 정의

프로젝트를 설치하려면 install() 명령어를 사용하여 설치 규칙을 정의해야 한다. 예를 들어, 라이브러리, 실행 파일, 헤더 파일 등을 설치할 위치를 지정할 수 있다.

install(TARGETS MyLibrary
    EXPORT MyLibraryTargets
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib
    RUNTIME DESTINATION bin
)

install(FILES include/MyLibrary.h DESTINATION include)

이렇게 하면 프로젝트가 빌드된 후, 지정된 위치에 파일들이 설치된다.

CMake Targets 및 Dependencies 관리

CMake에서는 타겟을 정의하여 빌드할 소스 파일을 지정하고, 타겟 간의 의존성을 관리할 수 있다.

타겟 정의

타겟은 add_library() 또는 add_executable() 명령어를 사용하여 정의된다. 각 타겟은 이름을 가지고 있으며, 타겟에 포함될 소스 파일들을 명시한다.

add_library(MyLibrary src/MyLibrary.cpp)
add_executable(MyExecutable src/main.cpp)

타겟 의존성 설정

target_link_libraries() 명령어를 사용하여 타겟 간의 의존성을 설정할 수 있다. 예를 들어, 실행 파일이 라이브러리를 참조해야 하는 경우 이 명령어를 사용한다.

target_link_libraries(MyExecutable PRIVATE MyLibrary)

패키지 배포

패키지를 배포하려면 CPack 도구를 사용할 수 있다. CPack은 CMake와 함께 제공되는 패키징 도구로, 다양한 형식의 패키지를 생성할 수 있다.

CPack 설정

CPack을 사용하려면 CMakeLists.txt 파일에 CPack 모듈을 포함하고, 필요한 변수들을 설정해야 한다.

include(CPack)

set(CPACK_PACKAGE_NAME "MyProject")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_GENERATOR "TGZ;ZIP")

패키지 생성

cpack 명령어를 실행하여 설정된 형식에 따라 패키지를 생성할 수 있다.

cpack

이 명령어는 CMakeLists.txt 파일에 정의된 설정에 따라 패키지를 생성한다.


관련 자료: