CMake가 'configure --prefix = DIR && make all install'과 동등한 것은 무엇입니까?
그렇습니다 cmake . && make all install
. 이것은 작동하지만에 설치됩니다 /usr/local
.
다른 접두사 (예 :에 /usr
) 를 설치해야합니다 .
이란 무엇입니까 cmake
및 make
설치 명령 줄에 /usr
대신 /usr/local
?
명령 행에서 CMake 변수를 전달하거나 ccmake / cmake-gui를 사용하여 캐시 된 변수를 편집 할 수 있습니다. 명령 행에서
cmake -DCMAKE_INSTALL_PREFIX : PATH = / usr. && 모두 설치
프로젝트를 구성하고 모든 대상을 빌드하고 / usr 접두사에 설치하십시오. 유형 (PATH)이 반드시 필요한 것은 아니지만 Qt 기반 cmake-gui가 디렉토리 선택기 대화 상자를 표시하게합니다.
의견으로 일부 사소한 추가는 간단한 동등성을 제공하는 것만으로는 충분하지 않음을 분명히합니다. 모범 사례는 외부 빌드 디렉토리를 사용하는 것입니다 (예 : 소스가 아닌). 또한 생성기를 추상화하는보다 일반적인 CMake 구문을 사용합니다.
mkdir 빌드 && cd 빌드 && cmake -DCMAKE_INSTALL_PREFIX : PATH = / usr .. && cmake --build. --target install --config 릴리즈
꽤 길어지고 더 이상 직접적으로 동등하지는 않지만 상당히 간결한 형태로 모범 사례에 더 가깝습니다. --config는 다중 구성 생성기 (예 : MSVC)에서만 사용되며 무시됩니다. 다른 사람들에 의해.
허용 된 답변의 ": PATH"부분은 생략 할 수 있습니다. 이 구문은 더 기억에 남을 수 있습니다.
cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install
CMake 및 Autotools 모두 에서 구성시 항상 설치 경로를 설정할 필요는 없습니다. 다음 과 같이 설치시 DESTDIR 을 사용할 수 있습니다 ( 여기 참조 ).
make DESTDIR=<installhere> install
DESTDIR과 PREFIX의 미묘한 차이점을 설명하는 이 질문 도 참조하십시오 .
이는 단계별 설치를위한 것이며 프로그램을 실행하는 곳이 아닌 다른 위치 (예 : /etc/alternatives
심볼릭 링크)에 프로그램을 저장할 수 있도록하기위한 것입니다 .
그러나 패키지를 재배치 할 수 있고 구성 단계를 통해 설정된 하드 코딩 된 (접두사) 경로가 필요하지 않으면 건너 뛸 수 있습니다. 따라서 대신 :
cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install
당신은 실행할 것입니다 :
cmake . && make DESTDIR=/usr all install
user7498341이 지적했듯이 실제로 PREFIX를 사용해야하는 경우에는 적합하지 않습니다.
플랫폼 간 CMake 프로젝트를 빌드하는 방법은 다음과 같습니다.
/project-root> mkdir build
/project-root> cd build
/project-root/build> cmake -G "<generator>" -DCMAKE_INSTALL_PREFIX=stage ..
/project-root/build> cmake --build . --target=install --config=Release
- 처음 두 줄은 소스 외부 빌드 디렉토리를 만듭니다.
- 세 번째 줄은 설치 결과를 넣을 위치를 지정하는 빌드 시스템을 생성합니다 (항상 배치합니다
./project-root/build/stage
-경로는 절대가 아닌 경우 항상 현재 디렉토리를 기준으로 간주됩니다) - 네 번째 라인은
.
이전 라인에서 구성된 빌드 시스템으로 구성된 프로젝트를 빌드합니다 .install
필요한 모든 종속 대상을 빌드 해야하는 대상을 실행 한 다음 파일을에 복사합니다CMAKE_INSTALL_PREFIX
(이 경우에는./project-root/build/stage
. Visual Studio에서와 같이 다중 구성 빌드의 경우 구성을 지정할 수도 있습니다) 선택적--config <config>
플래그. cmake --build
명령을 사용할 때 좋은 부분 은 다른 명령이 필요없이 모든 생성기 (예 : makefile 및 Visual Studio)에서 작동한다는 것입니다.
나중에 설치된 파일을 사용하여 패키지를 만들거나 다른 프로젝트에 포함시킵니다.
브루스 아담스의 답변에 대해 :
당신의 대답은 위험한 혼란을 야기합니다. DESTDIR은 루트 트리에서 설치하기위한 것입니다. DESTDIR을 지정하지 않은 경우 루트 트리에 설치 될 내용을 볼 수 있습니다. PREFIX는 실제 설치의 기반이되는 기본 디렉토리입니다.
예를 들어 PREFIX = / usr / local은 패키지 의 최종 대상이 / usr / local임을 나타냅니다 . DESTDIR = $ HOME을 사용하면 $ HOME이 루트 (/) 인 것처럼 파일을 설치합니다. DESTDIR이 / tmp / destdir이라고하면 'make install'이 어떤 영향을 미치는지 알 수 있습니다. 그 정신, DESTDIR이해야 결코 내장 객체에 영향을 미치지 않습니다.
그것을 설명하는 makefile 세그먼트 :
install:
cp program $DESTDIR$PREFIX/bin/program
프로그램은 PREFIX가 최종 (즉, 프로덕션) 디렉토리의 기본 디렉토리라고 가정해야합니다. DESTDIR = / something에 설치된 프로그램을 심볼릭 링크 할 수 있다는 것은 단지 프로그램이 단순히 작동하지 않기 때문에 PREFIX를 기반으로 파일에 액세스하지 않음을 의미합니다. cat (1)은 (가장 간단한 형태) 어디서나 실행할 수있는 프로그램입니다. 다음은 그렇지 않은 예입니다.
prog.pseudo.in:
open("@prefix@/share/prog.db")
...
prog:
sed -e "s/@prefix@/$PREFIX/" prog.pseudo.in > prog.pseudo
compile prog.pseudo
install:
cp prog $DESTDIR$PREFIX/bin/prog
cp prog.db $DESTDIR$PREFIX/share/prog.db
$ PREFIX / bin / prog 이외의 곳에서 prog를 실행하려고하면 prog.db가 예상 위치에 없으므로 찾을 수 없습니다.
마지막으로 / etc / alternatives는 실제로 이런 방식으로 작동하지 않습니다. 루트 트리에 설치된 프로그램에 대한 심볼릭 링크가 있습니다 (예 : vi-> / usr / bin / nvi, vi-> / usr / bin / vim 등).
CMake를make
사용하는 경우 실제 생성기 (예 : via ) 를 호출하는 것은 나쁜 습관으로 간주됩니다 . 다음과 같이하는 것이 좋습니다 :
단계 구성 :
cmake -Hfoo -B_builds/foo/debug -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX=/usr
빌드 및 설치 단계
cmake --build _builds/foo/debug --config Debug --target install
이 방법에 따라하면 쉽게 발생 (예를 전환 할 수 -GNinja
위해 닌자 임의 발생기 특정 명령을 기억할 필요가 없음).
'Programing' 카테고리의 다른 글
git 'pull request'가 'push request'라고 불리는 이유는 무엇입니까? (0) | 2020.02.29 |
---|---|
Android Studio가 느립니다 (속도를 높이는 방법)? (0) | 2020.02.29 |
Ajax를 사용하여 데이터와 파일을 모두 한 형태로 업로드 하시겠습니까? (0) | 2020.02.29 |
가치에서 C # 열거 형 설명을 얻는 방법은 무엇입니까? (0) | 2020.02.29 |
루트가 아닌 프로세스가 Linux의 "권한있는"포트에 바인딩 할 수있는 방법이 있습니까? (0) | 2020.02.29 |