Install
CMake의 install 명령어는 배포할 바이너리나 헤더들을 특정 디렉토리에 모으기 위해 사용된다. 즉 설치(install)이라는 키워드가 가지는 의미는 "빌드 산출물을 잘 정리해서 원하는 디렉토리에 배치하는 것"이다.
기본적으로 다음과 같은 명령어를 따라서 configure 및 build를 수행하게 되면 빌드 디렉토리 안에 모든 결과물들이 존재하게 된다.
cmake -S . -B build
cmake --build build
isntall() 커맨드를 사용할 수 있도록 세팅하였다면, `cmake --instal build` 한 번만 실행파면 실행 파일이 `bin/`에, 라이브러리가 `lib/`에, 헤더가 `include/`에 정리되어 들어올 수 있도록 할 수 있다. 즉, 설치된 프로그램처럼 사용이 가능하다.
그리고 DESTINATION 옵션을 사용할 때, 절대 경로로 동작하지만 상대 경로를 권장한다. 상대 경로로 주어지면 기본적으로`CMAKE_INSTALL_PREFIX` 변수값을 기준으로 해석된다. 그리고 상대 경로를 사용하면 --prefix 같은 옵션을 사용할 수 있지만, 절대 경로에선 사용하지 못한다.
예제
1. 실행 파일 설치 예시
CMakeLists.txt
cmake_minimum_required(VERSION 3.19)
project(HelloInstall LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
add_executable(hello src/hello.cpp)
install (TARGETS hello
RUNTIME DESTINATION bin
)
message(${CMAKE_INSTALL_PREFIX})
여기서 RUNTIME 옵션은 Executable과 DLL들을 의미한다. hello 타겟에 존재하는 exe 파일과 dll 파일을 지정한 디렉토리로 옮기게 된다. 리눅스 기준으로는 실행 파일만 복사하여 install 디렉토리에 넣게 된다.
./src/hello.cpp
#include <iostream>
int main()
{
std::cout << "Hello, CMake Install!" << std::endl;
return 0;
}
cmake 명령어
cmake -S . -B build
cmkae --build build
cmake --install build --prefix ./install
여기서 `--install build` 명령어는 복사할 대상이 들어있는 빌드 디렉토리를 지정하고, 규칙에 맞게 빌드 결과물을 복사하라는 뜻이다. 그리고 --prefix값은 기본적으론 `/usr/local`이지만 이 값을 `./install`로 지정한다.
결과:
`./install/bin/hello`
2. 실행 파일과 함께 라이브러리, 헤더 설치 예시
CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(AppWithLib LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
add_library(mylib src/mylib.cpp)
target_include_directories(mylib PUBLIC include)
add_executable(myapp src/main.cpp)
target_link_libraries(myapp PRIVATE mylib)
install(TARGETS mylib myapp
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include/ DESTINATION include)
src/main.cpp
#include <iostream>
#include "mylib.h"
int main()
{
int x = 3;
int y = 4;
int result = add(x, y);
std::cout << x << " + " << y << " = " << result << std::endl;
return 0;
}
include/mylib.h
#ifndef MYLIB_H
#define MYLIB_H
int add(int a, int b);
#endif
src/mylib.cpp
#include "mylib.h"
int add(int a, int b)
{
return a + b;
}
cmake 명령어
cmake -S . -B build
cmake --build build
cmake --install build --prefix ./install
참고 자료
'패키지 설치 및 빌드 시스템 > CMake' 카테고리의 다른 글
| [CMake] ExternalProject_Add() 사용 연습 (0) | 2025.04.24 |
|---|---|
| [CMake] .cmake 파일의 사용 (0) | 2025.04.23 |
| [CMake] target_link_directories(), target_link_libraries() (0) | 2025.04.22 |
| [CMake] CMAKE_PREFIX_PATH (0) | 2025.04.17 |
| [CMake] find_package() (0) | 2025.04.16 |