CPack은 CMake 프로젝트에서 소프트웨어 패키지를 생성하기 위해 사용되는 툴이다. CMake의 모듈로 포함되어 있으며, 다양한 패키지 형식을 지원한다. CPack은 소프트웨어 배포를 간소화하고, 다양한 운영체제와 패키지 매니저에 대응할 수 있도록 설계되었다.
CPack 개요
CPack은 CMake와 긴밀하게 통합되어 있으며, CMakeLists.txt 파일에 필요한 지시어를 추가하여 쉽게 패키징 작업을 수행할 수 있다. CPack은 기본적으로 CMake의 빌드 시스템을 기반으로 작동하며, 다양한 패키지 형식을 생성하는 기능을 제공한다. 예를 들어, DEB, RPM, NSIS, DMG 등의 형식을 지원한다. CPack은 또한 사용자 정의 설정을 통해 특정 요구에 맞는 패키지를 생성할 수 있다.
CPack의 기본 설정
CPack을 사용하기 위해서는 CMakeLists.txt 파일에 CPack 모듈을 포함해야 한다. 이를 위해 include(CPack)
명령을 사용한다. CPack을 설정하기 위해서는 몇 가지 기본 변수를 설정해야 한다.
CPACK_PACKAGE_NAME
: 패키지의 이름을 지정한다.CPACK_PACKAGE_VERSION
: 패키지의 버전을 설정한다.CPACK_PACKAGE_CONTACT
: 패키지 유지보수자의 연락처 정보를 지정한다.
이러한 변수들은 패키지의 메타데이터를 정의하며, 패키지 생성 시 패키지 정보에 포함된다.
set(CPACK_PACKAGE_NAME "MySoftware")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_CONTACT "maintainer@example.com")
include(CPack)
CPack 구성 옵션
CPack은 기본적인 설정 외에도 다양한 구성 옵션을 제공한다. 이러한 옵션들은 패키지의 내용, 형식, 설치 경로 등을 제어한다.
CPACK_GENERATOR
: 생성할 패키지 형식을 지정한다. 예를 들어,DEB
,RPM
,NSIS
등을 사용할 수 있다. 복수의 형식을 지정할 수도 있다.CPACK_PACKAGE_FILE_NAME
: 생성된 패키지 파일의 이름을 정의한다. 기본적으로는 패키지 이름과 버전을 기반으로 생성된다.CPACK_PACKAGE_INSTALL_DIRECTORY
: 설치 시 기본 설치 디렉토리를 지정한다.CPACK_DEBIAN_PACKAGE_DEPENDS
: DEB 패키지 생성 시 필요한 의존 패키지를 지정한다.CPACK_RPM_PACKAGE_REQUIRES
: RPM 패키지 생성 시 필요한 의존 패키지를 지정한다.
예를 들어, 다음과 같이 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 설정 파일을 사용하는 방법을 사용할 수 있다.
CPACK_PROJECT_CONFIG_FILE
: 프로젝트별 CPack 구성 파일을 지정한다. 이 파일에서 CPack 설정을 별도로 정의할 수 있다.CPACK_INSTALL_CMAKE_PROJECTS
: 여러 개의 프로젝트를 패키징할 때 사용할 수 있는 옵션으로, 각 프로젝트의 설치 경로와 구성을 지정할 수 있다.
예를 들어, 다음과 같은 방법으로 다중 패키지를 생성할 수 있다.
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은 기본 설정 외에도 고급 사용자 정의 설정을 제공한다. 예를 들어, 특정 파일을 포함하거나 제외할 수 있으며, 설치 스크립트를 추가할 수도 있다.
CPACK_PACKAGE_DESCRIPTION_FILE
: 패키지의 설명을 포함하는 파일을 지정한다.CPACK_PACKAGE_ICON
: 패키지 설치 시 사용할 아이콘 파일을 지정한다.CPACK_NSIS_MUI_ICON
: NSIS 설치 프로그램에서 사용할 아이콘을 지정한다.
고급 설정을 통해 보다 정교한 패키지를 생성할 수 있다.
관련 자료:
- CMake Documentation: https://cmake.org/cmake/help/latest/manual/cpack.1.html
- CPack Overview: https://cmake.org/cmake/help/latest/module/CPack.html