CMAKE_INSTALL_PREFIX
cmake_minimum_required(VERSION 2.8)
project(foo)
add_library(foo foo.cpp)
install(TARGETS foo DESTINATION lib)
# 빌드 및 설치
[install-examples]> cmake -H simple -B _builds -DCMAKE_INSTALL_PREFIX=_install/config-A
[install-examples]> cmake --build _builds --target install
Scanning dependencies of target foo
[ 50%] Building CXX object CMakeFiles/foo.dir/foo.cpp.o
[100%] Linking CXX static library libfoo.a
[100%] Built target foo
Install the project...
-- Install configuration: ""
-- Installing: /.../install-examples/_install/config-A/lib/libfoo.a # 설치 경로
[install-examples]> cmake -H simple -B _builds -DCMAKE_INSTALL_PREFIX=_install/config-B
[install-examples]> cmake --build _builds --target install
[100%] Built target foo
Install the project...
-- Install configuration: ""
-- Installing: /.../install-examples/_install/config-B/lib/libfoo.a # 설치 경로
- 주의
- CMAKE_INSTALL_PREFIX 변수는 사용자가 변경할 수 있도록 디자인 되었다.
- 코드에서 강제로 변경 시키는 것은 권고되지 않는다.
# 코드에서 CMAKE_INSTALL_PREFIX 변경
cmake_minimum_required(VERSION 2.8)
project(foo)
# 나쁜 코드
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/3rdParty/root")
add_library(foo foo.cpp)
install(TARGETS foo DESTINATION lib)
# 사용자가 "`pwd`/_install" 에 설치하려고 함
[install-examples]> rm -rf _builds
[install-examples]> cmake -Hmodify-bad -B_builds -DCMAKE_INSTALL_PREFIX="`pwd`/_install"
[install-examples]> cmake --build _builds --target install
-- Install configuration: ""
-- Installing: /.../install-examples/_builds/3rdParty/root/lib/libfoo.a
# 라이브러리가 예상치 못한 3rdParty/root에 설치 되었다 원래는 "`pwd`/_install"에 설치 되어야 하는데
# make의 DESTDIR로 설치 경로 변경할 수 있다.
[install-examples]> rm -rf _builds
[install-examples]> cmake -Hsimple -B_builds -DCMAKE_INSTALL_PREFIX=""
[install-examples]> make -C _builds DESTDIR="`pwd`/_install/config-A" install
[install-examples]> make -C _builds DESTDIR="`pwd`/_install/config-B" install
추가적인 파일 인스톨하기
- configure 과정에서 파일을 인스톨 할 수 있다.
# 빌드 시스템 생성시 README 파일을 빌드 시스템에 포함
cmake_minimum_required(VERSION 2.8)
project(foo)
add_library(foo foo.cpp)
install(TARGETS foo DESTINATION lib)
# BAD CODE!
file(
COPY
"${CMAKE_CURRENT_LIST_DIR}/README"
DESTINATION
"${CMAKE_INSTALL_PREFIX}/share/foo" # configure 과정에 포함됨
)
include(CPack)
# CMAKE_INSTALL_PREFIX 사용되면 잘못된 것이다.
# 사용자는 프로젝트를 설치하고 싶지 않을 수 있다
# 그런데 configure시 루트에 파일을 복사하는 것은 의도하지 않은 일이 된다.
# 위 방법 대신 install 명령을 사용해야 한다.
cmake_minimum_required(VERSION 2.8)
project(foo)
add_library(foo foo.cpp)
install(TARGETS foo DESTINATION lib)
install(FILES README DESTINATION share/foo) # install 과정에서 파일 설치
include(CPack)
# 인스톨
[install-examples]> cmake -H right-usage -B _builds -DCMAKE_INSTALL_PREFIX="`pwd`/_install"
[install-examples]> cmake --build _builds --target install
Scanning dependencies of target foo
[ 50%] Building CXX object CMakeFiles/foo.dir/foo.cpp.o
[100%] Linking CXX static library libfoo.a
[100%] Built target foo
Install the project...
-- Install configuration: ""
-- Installing: /.../install-examples/_install/lib/libfoo.a
-- Installing: /.../install-examples/_install/share/foo/README # 여기에 인스톨됨
install 과정에서 스크립트 실행하기
cmake_minimum_required(VERSION 2.8)
project(foo)
set(script "${CMAKE_CURRENT_BINARY_DIR}/script.cmake")
configure_file(script.cmake.in "${script}" @ONLY) # script
install(SCRIPT "${script}") # install 과정에 스크립트 실행
include(CPack)
# script.cmake.in
cmake_minimum_required(VERSION 2.8)
set(correct "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}") # 환경변수 DESTDIR 사용
message("Incorrect value: '@CMAKE_INSTALL_PREFIX@'") # make로 인스톨 할 경우 X
message("Correct value: '${correct}'")
file(WRITE "${correct}/share/foo/info" "Some info") # 인스톨 과정중 파일 생성
# make를 이용한 설치
[install-examples]> cmake -Hconfigure -B_builds -DCMAKE_INSTALL_PREFIX=""
[install-examples]> make DESTDIR="`pwd`/_install/config-A" -C _builds install
make: Entering directory '/.../install-examples/_builds'
Install the project...
-- Install configuration: ""
Incorrect value: ''
Correct value: '/.../install-examples/_install/config-A' # 인스톨 과정중 스크립트 실행
make: Leaving directory '/.../install-examples/_builds'
[install-examples]> find _install/config-A -type f
_install/config-A/share/foo/info
# cmake를 이용한 설치
[install-examples]> cmake -H configure -B_builds -DCMAKE_INSTALL_PREFIX="`pwd`/_install"
[install-examples]> cmake --build _builds --target install
Install the project...
-- Install configuration: ""
Incorrect value: '/.../install-examples/_install' # 인스톨 과정중 스크립트 실행
Correct value: '/.../install-examples/_install'
[install-examples]> find _install -type f
_install/share/foo/info