브루스 아담스의 답변에 대해 :
당신의 대답은 위험한 혼란을 야기합니다. 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 등).
CMakeLists.txt
을 설정하고 잊어 버릴 수 있도록 편집하십시오 . 나는 설치 디렉토리를 즉석에서 변경하는 일반적인 유스 케이스가 없다고 말하지는 않는다. 분명히 투표 수에 의해 판단된다. 나는 CMake를 처음 접 했고이 문제가 생길 때 호기심이 많다.