로컬로 빌드된 바이너리를 올바르게 처리하는 방법은 무엇입니까?

로컬로 빌드된 바이너리를 올바르게 처리하는 방법은 무엇입니까?

나는 소스에서 바이너리를 만드는 경향이 있습니다. 내 평소 설정은 다음과 같습니다

$HOME/build -> this gets the sources
$HOME/programs -> this is where the build happen, so where the binaries are

완료되면 다음을 내bashrc

export MYNEWBINDIR = $HOME/programs/...
export PATH=$MYNEWBINDIR:$PATH

내 질문은: 이것이 권장되는 방법입니까? 예를 들어 로컬을 만들고 $HOME/bin거기에 있는 모든 바이너리를 심볼릭 링크한 다음 경로에 추가할 수 있습니다.

답변1

원하는 것을 수행하는 것은 어느 정도 개인에게 달려 있지만 기본 시스템이나 패키지 관리자가 이미 사용하고 있는 디렉터리를 항상 유지하는 것이 좋습니다. 이전에 설치된 파일을 덮어써서 패키지 관리자를 혼란스럽게 하고 싶지는 않을 것입니다! 그러므로 반드시 /bin혼자 떠나십시오.

대부분의 시스템에서는/usr/local ~해야 한다일부 시스템(예: FreeBSD 및 OpenBSD)의 패키지 관리자도 포트/패키지에서 설치된 소프트웨어를 로컬 소프트웨어로 취급하기 때문에 이 영역을 사용하지만 물건을 설치하는 안전한 영역입니다.

"항목도 참조하세요.파일 시스템 계층 표준" 그리고"유닉스 파일 시스템" 위키피디아에서.

일부 Unices도 있습니다.hier(7)수동참고하시면 됩니다. (링크는 OpenBSD 버전을 가리키지만 적어도 Linux의 Ubuntu에서도 사용할 수 있습니다. OpenBSD의 경우 시스템 소프트웨어가 인식하는 디렉터리를 문서화하므로 예를 /opt들어 언급하지 않습니다.)

작업이 완료되면 삭제될 수 있는 디렉터리이므로 콘텐츠를 어디에 구축하는지는 중요하지 않습니다. 그러나 실제 설치 디렉터리에서 멀리 떨어져 있는 것이 가장 좋습니다. 나는 /bin및 에 소스 트리가 있는 시스템 에서 작업했는데 /usr/local매우 어수선했습니다.

make install또한 빌드를 조정하지 않는 한 빌드 디렉터리에서 실행 파일을 실행하는 것보다 실제로 소프트웨어로 작업하는 것이 좋습니다 . PATH실제로 실행 파일을 수집하지 않는 한 한 위치에 실행 파일을 수집하면 설정이 더 깔끔하고 쉬워집니다.생각하다PATH분명히 모든 소프트웨어에는 고유한 요소가 있습니다.


제 개인적인 의견은 다음과 같습니다.

나 자신을 위해 특별히 제작한 소프트웨어의 경우 설치를 위해 개인 계층 구조를 사용하는 경향이 있습니다 $HOME/local.

GNU 자동 도구를 사용하여 스크립트가 있는 프로그램을 컴파일할 때 이는 매우 간단합니다 configure. 그냥 말해

$ ./configure --prefix="$HOME/local"

구성 단계에서 이전 makemake install.

CMake를 사용하여 프로그램을 컴파일할 때 다음과 같은 방법으로 동일한 결과를 얻을 수 있습니다.

$ cmake -DCMAKE_INSTALL_PREFIX="$HOME/local" .

make이전 및 단계 make install. Perl 모듈 등을 설치할 때 (다른 방법으로) 동일한 효과가 발생할 수 있습니다.

그렇다면 분명히 $HOME/local/bin경로에 추가해야합니다 ...

개인적으로 저는GNU 스토우또한 이는 실제로 $HOME/local설치 접두사로 지정하는 것이 아니라 $HOME/local/stow/thing-2.1패키지를 구성할 때 지정한다는 것을 의미합니다 thing-2.1.

설치 후:

$ cd "$HOME/local/stow"
$ stow thing-2.1

해당 디렉토리의 내용이 표시됩니다(기호 링크를 사용하여)( $HOME/local/stow/thing-2.1/bin아래에 설치된 모든 디렉토리에 대해서도 $HOME/local/bin유사함 ).libthing-2.1

Stow가 너무 쉬워요제거소프트웨어. make install단지 소프트웨어를 제거하고 삭제하기 위해 사람이 설치한 모든 작은 파일을 추적하는 대신 ,

$ cd "$HOME/local/stow"
$ stow -D thing-2.1
$ rm -rf thing-2.1

관련 정보