프로젝트 설정
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 파일에 정의된 설정에 따라 패키지를 생성한다.
관련 자료:
- CMake 공식 문서: https://cmake.org/documentation/
- CMake 패키지 구성 및 배포 예제: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html
- CPack 공식 문서: https://cmake.org/cmake/help/latest/module/CPack.html