CMAKE_INSTALL_PREFIX 사용 방법


97

기본 / usr / local 대신 / usr에 설치하여 설치 대상으로 Makefile을 생성하고 싶습니다. 빌드 디렉토리가 소스 하위 디렉토리에서 완료되었다고 가정하면 다음을 실행합니다.

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt에는 다음이 포함됩니다. CMAKE_INSTALL_PREFIX:PATH=/usr(OK?)

이제 실행합니다.

하다
설치하다

모든 파일은 여전히 ​​usr / local에 설치됩니다. 뭐가 잘못 되었 니?

편집 : CMakeLists.txt 프로젝트 파일에 CMAKE_INSTALL_PREFIX가 없습니다. cmake를 실행하기 전에 출력 디렉토리에서 모든 것을 삭제합니다. CMakeLists.txt의 설치 지시문은 다음과 같습니다.

install(TARGETS mylibrary DESTINATION lib)

답변:


120

이는 다음과 같아야합니다 ( 문서 참조 ).

cmake -DCMAKE_INSTALL_PREFIX=/usr ..

30

이 변수를 사용하는 방법에는 두 가지가 있습니다.

  • Job이 언급 한 것처럼 명령 줄 인수로 전달합니다.

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • 에 가치 할당 CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    그러나 명령 전에 배치하는 것을 잊지 마십시오 PROJECT(< project_name>) . 그렇지 않으면 작동하지 않습니다!


4
이상하게도 SET () 문은 PROJECT () 문 (CMake 2.8) 뒤에 배치하는 경우에만 작동합니다.
AstroFloyd

2
이 답변 과 링크 된 참조는 project () 명령 문제 이전 / 이후에 대해 더 직접적으로 논의합니다.
Craig Scott

PROJECT명령 은 무엇이며 cmake이전 에이 옵션을 사용 하는 방법 은 무엇입니까 ? 예가 있습니까?
Stephane 2019

6

그러나 PROJECT (<project_name>) 명령 앞에 배치하는 것을 잊지 마십시오. 그렇지 않으면 작동하지 않습니다!

cmake를 사용한 첫 주-몇 년 동안 GNU 자동 도구를 사용 했으므로 여전히 배우고 있지만 (m4 매크로를 작성 하는 것이 더 낫습니다) 프로젝트 설정 CMAKE_INSTALL_PREFIX 수정 하는 것이 더 좋은 곳 이라고 생각합니다 .

CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
project (BarkBark)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")

첫 실행 (캐시 없음)

CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- The C compiler identification is GNU 4.4.7
-- etc, etc,...
CIP = /usr/local (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

두 번째 실행

CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

내가 틀렸다면 알려주세요. 배워야 할 일이 많습니다. 재미 있어요.


SET을 할 때 FORCE를 사용하십시오 : set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix"FORCE)
Jav_Rock
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.