CPack은 CMake 프로젝트에서 소프트웨어 패키지를 생성하기 위해 사용되는 툴이다. CMake의 모듈로 포함되어 있으며, 다양한 패키지 형식을 지원한다. CPack은 소프트웨어 배포를 간소화하고, 다양한 운영체제와 패키지 매니저에 대응할 수 있도록 설계되었다.

CPack 개요

CPack은 CMake와 긴밀하게 통합되어 있으며, CMakeLists.txt 파일에 필요한 지시어를 추가하여 쉽게 패키징 작업을 수행할 수 있다. CPack은 기본적으로 CMake의 빌드 시스템을 기반으로 작동하며, 다양한 패키지 형식을 생성하는 기능을 제공한다. 예를 들어, DEB, RPM, NSIS, DMG 등의 형식을 지원한다. CPack은 또한 사용자 정의 설정을 통해 특정 요구에 맞는 패키지를 생성할 수 있다.

CPack의 기본 설정

CPack을 사용하기 위해서는 CMakeLists.txt 파일에 CPack 모듈을 포함해야 한다. 이를 위해 include(CPack) 명령을 사용한다. CPack을 설정하기 위해서는 몇 가지 기본 변수를 설정해야 한다.

이러한 변수들은 패키지의 메타데이터를 정의하며, 패키지 생성 시 패키지 정보에 포함된다.

set(CPACK_PACKAGE_NAME "MySoftware")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_CONTACT "maintainer@example.com")
include(CPack)

CPack 구성 옵션

CPack은 기본적인 설정 외에도 다양한 구성 옵션을 제공한다. 이러한 옵션들은 패키지의 내용, 형식, 설치 경로 등을 제어한다.

예를 들어, 다음과 같이 CMakeLists.txt 파일에서 설정할 수 있다.

set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "/usr/local")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.14)")
include(CPack)

CPack을 이용한 다중 패키지 생성

CPack은 하나의 CMake 프로젝트에서 여러 개의 패키지를 생성할 수 있도록 지원한다. 이를 위해 CMake에서 구성 파일을 분리하거나, 여러 개의 CPack 설정 파일을 사용하는 방법을 사용할 수 있다.

예를 들어, 다음과 같은 방법으로 다중 패키지를 생성할 수 있다.

set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/CPackConfig.cmake")
include(CPack)

CPack 구성 파일 예제

CPack 설정 파일은 일반적으로 CMake 프로젝트의 루트 디렉토리에 위치하며, 프로젝트별 설정을 포함한다. 다음은 CPack 설정 파일의 예제이다.


set(CPACK_PACKAGE_NAME "MySoftware")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_GENERATOR "DEB;RPM")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.14)")
set(CPACK_RPM_PACKAGE_REQUIRES "libc6 >= 2.14")

이 파일을 통해 CPack은 DEB 및 RPM 형식의 패키지를 생성하게 된다.

CPack 사용법

CPack을 사용하여 패키지를 생성하기 위해서는, 빌드 디렉토리에서 cpack 명령을 실행하면 된다. CPack은 자동으로 CMakeLists.txt 파일 또는 CPack 설정 파일에 정의된 옵션을 읽어들여 패키지를 생성한다. 다음은 cpack 명령의 기본 사용 예이다.

cpack

이 명령을 실행하면, 설정된 모든 형식에 대해 패키지가 생성된다. 특정 형식의 패키지를 생성하려면 -G 옵션을 사용하여 패키지 형식을 지정할 수 있다.

cpack -G DEB

이 명령은 DEB 형식의 패키지만을 생성한다.

CPack 고급 설정

CPack은 기본 설정 외에도 고급 사용자 정의 설정을 제공한다. 예를 들어, 특정 파일을 포함하거나 제외할 수 있으며, 설치 스크립트를 추가할 수도 있다.

고급 설정을 통해 보다 정교한 패키지를 생성할 수 있다.


관련 자료: