파다 평범일상

CMake와 CPack으로 프로젝트 제품 패키지하기 본문

컴퓨터 IT/얕은 컴퓨터 지식과 프로그래밍

CMake와 CPack으로 프로젝트 제품 패키지하기

파다 평범일상 2023. 7. 26. 10:48
반응형
CPack이란 무엇인가?

 

CPack CMake 함께 배포되는 강력하고 사용하기 쉬운 교차 플랫폼 소프트웨어 패키징 도구입니다. CMake 생성기 개념을 사용하여 특정 플랫폼에서 패키지 생성을 추상화합니다. CMake 함께 또는 없이 사용할 있지만 시스템에 설치되는 일부 소프트웨어에 따라 달라질 있습니다. 간단한 구성 파일을 사용하거나 CMake 모듈을 사용하여 프로젝트 작성자는 복잡한 프로젝트를 간단한 설치 프로그램으로 패키징할 있습니다.

 

CPack 제일 기초

 

cmake_minimum_required(VERSION 3.20)
project(CoolStuff)
add_executable(coolstuff coolstuff.cxx)
install(TARGETS coolstuff RUNTIME DESTINATION bin)
include(CPack)

CoolStuff 프로젝트에서 실행 파일이 생성되어 bin 디렉토리에 설치됩니다. 그러면 CPack 파일이 프로젝트에 포함됩니다.

시점에서 CoolStuff 프로젝트는 CPack 활성화합니다.

 

CPack이 어떻게 활성화되고 포함되는지?

 

include(CPack)명령이 실행 되면 CPack.cmake 파일이 프로젝트에 포함됩니다. 기본적으로 이것은 configure_file프로젝트의 이진 트리를 CPackConfig.cmake만들고 생성하는 명령입니다 .

CPackSourceConfig.cmake이 파일에는 패키징 단계에서 CPack이 실행될 때 사용할 변수를 설정하는 일련의 설정 명령이 포함되어 있습니다.

CPack.cmake현재 프로젝트에서 "CPACK_"으로 시작하는 모든 변수가 포함됩니다. 이것은 명령을 사용하여 수행됩니다.

CPack 프로젝트에서 CMake 다음에 실행된다는 점을 명심하는 것이 중요합니다. CPack CMake 동일한 파서를 사용하지만 CMake 프로젝트와 동일한 변수 값을 갖지 않습니다. CPACK_으로 시작하는 변수만 포함되며 이러한 변수는 CMake 의해 구성 파일로 구성됩니다. 변수 값이 이스케이프 문자를 사용하는 경우 일부 오류와 혼동이 발생할 있습니다.

 

CPack 생성기에 사용되는 변수

 

 

내가 사용했던 예제에서는?

 

project(AirSDK)

set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")                 # 패키지 결과물 이름 지정
set(CPACK_PACKAGE_VENDOR "") 				  # 패키지 공급업체 이름 지정
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_NAME}")  # 패키지에 대한 간단한 설명
set(CPACK_GENERATOR "TGZ")                                # 패키지 생성기 목록 지정
set(CPACK_SOURCE_GENERATOR "TGZ;ZIP")                     # 소스 패키지 생성기 목록 지정 (!!!!!! CPACK_GENERATOR 명령어와의 차이점은?)
set(CPACK_SOURCE_IGNORE_FILES                             # 소스 패키지를 빌드할 때 패키지되지 않는 소스 패턴이며, 정규식 패턴 적용 가능
/_deps
/.git
/.gitignore
/.vscode
/dist
/.*build.*
/.*KeyStore.*
/.*keystore.*
/\\\\.DS_Store
)

set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)                   # 구성요소 패키지 생성 활성화
set(CPACK_COMPONENTS_ALL                                  # 설치할 구성 요소 목록
project_libraries
project_headers
)

include(CPack)                                            # CPack 활성화, CPack 변수 선언 및 설정 밑에서 해야 적용된다 (!!!!!!!)

cpack_add_component(project_libraries                	  # 설치할 구성 요소에 대한 설명
DISPLAY_NAME "Libraries"                                  # 콘솔창에 표시할 디스플레이 이름 지정
GROUP rel)                                                # 구성 요소가 포함된 그룹 지정

cpack_add_component(project_headers
DISPLAY_NAME "Headers"
GROUP rel)

install(TARGETS libzmq                                    # 설치 대상 정의
LIBRARY                                                   # 설치 대상의 아티팩트 지정 (!!!!!! 지정을 안할경우 어떻게 되는가?)
DESTINATION lib                                           # 설치할 디렉토리 지정
COMPONENT project_libraries                          	  # 설치 규칙이 연결된 설치 구성 요소를 지정 (!!!!!! 여기서는 CPack Component를 지정했으니 CPack이 알아서 경로찾고 하려나..)
)

 

 

Comments