Automake-소스 트리를 깨끗하게 유지하는 방법?


10

GNU autotools를 사용하여 자체 빌드하는 프로젝트가 있습니다. autotools가 버전이없는 모든 제어 파일을 별도의 디렉토리에 생성하여 소스 트리를 임시 파일을 깨끗하게 유지할 수 있도록 수정하려고합니다. 누구 든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까?


6
Tree-out-tree build : stackoverflow.com/questions/1311231 / ... 불행히도 여전히 일부 잔류 물이 남습니다. CMake에게 언젠가 시도해보십시오.
Vitor Py

3
그 날이 왔습니다. 그 못생긴 autconf에서 cmake로 바꾸는 데 1 시간도 걸리지 않았습니다.
vorad

1
CMake는 autoconf보다 훨씬 깨끗합니다. 실제로, out of tree 빌드는 CMake 빌드를 수행하는 가장 일반적인 방법입니다. 좋은 선택 :)
Vitor Py

cmake를 사용하여 빌드 프로세스를 제어하는 ​​Makefile을 소스 트리의 맨 위에 두는 것이 얼마나 일반적입니까? makemkdir -p build && cd build && cmake .. && make 등 을 실행 한다고 가정 해보십시오 (다른 대상은 make test 등과 같은 것일 수 있습니다 ).
vorad

드문. CMake는 다른 방법이 아닌 makefile을 생성해야합니다! 실제 단어 예제는 Mastering CMake 또는 VTK 또는 KDE 구축 프로세스를 참조하십시오. CMake의 큰 장점은 make 위에 있습니다. 또한 Visual Studio vcproj, nmake Makefiles, XCode 등을 사용하여 소프트웨어를 빌드 할 수 있습니다. KDE는 쉘 스크립트 ( 'kdebuild')를 사용하여 빌드 프로세스를 시작합니다. 보세요.
Vitor Py

답변:


2

autotools 패키지에는 많은 이유로 하드 코딩 된 상대 경로와 이름이 있습니다. 당신의 최선의 선택은 출력을 요약하고 예를 들어, 귀하의 버전 관리에서 무시로 태그를하는 것입니다 .cvsignore, .hgignore또는 svn:ignoreattibute. 일부 RCS를 사용하면 와일드 카드를 재귀 적으로 지정할 수도 있습니다.


4
1970 년대 유닉스 프로그래밍 스타일이 아닌 다른 하드 코딩 된 상대 경로를 사용해야하는 좋은 이유는 없습니다.
Lothar

2

솔루션 : 소스 외부 빌드 만들기

  • 의견에서 제안했듯이 소스 외부 빌드를 수행 할 수 있습니다.
  • 원칙은 : "빌드 트리"라는 다른 디렉토리를 만들고 해당 디렉토리에서 configure 스크립트를 실행합니다 (상대 또는 절대 경로로).

자동 확인이 포함 된 예

예를 들어 GNU hello를 가져 와서 빌드하고 소스 트리가 조금 변경되지 않았는지 확인합니다.

소스 트리 준비

이 부분은 디렉토리를 가져오고 준비합니다.

{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}

일반적인 부분 : 프로젝트에서 재사용

이 부분은 다른 autoconf 기반 프로젝트와 함께 사용할 수 있습니다. 실행하기 전에 프로젝트를 시작하십시오. 주의하십시오 :이 실행됩니다 rm. 변형을 조심스럽게 사용하면 어떤 경우에도 책임이 있습니다.

export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)

부분 확인

빌드가 소스를 완전히 벗어 났는지 확인합니다.

{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}

여기에 이것을 출력합니다 :

/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.

보너스 : 비 루트 설치

--prefix="${MYPREFIX?}"위 의 부분은 선택 사항입니다. 계정에 로컬 인 "설치"를 수행 할 수 있습니다. 시스템 전체 위치에 전통적인 "sudo make install"을 원하면을 제거 할 수 있습니다 --prefix="${MYPREFIX?}".

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.