2009-06-25 9 views
3

우리 회사는 현재 타사 라이브러리에서 데비안 deb 패키지를 만드는 중입니다. 라이브러리는 자동 도구를 사용하여 작성됩니다. 나는 전에 Autotools로 일한 적이 없으며 힘든 시간을 보내고 있습니다. 라이브러리 소스는 configure.inMakefile.am 파일과 m4/ 디렉토리를 포함합니다. 나는이 순서를 사용하여 라이브러리를 구축 할 수 있어요 :얼마나 자주 autoconf를 실행합니까?

aclocal -I m4 -I /usr/share/aclocal 
autoheader 
libtoolize --automake 
automake -a 
autoconf 
./configure 
make 

파일 debian/rules에서 내가 CDBS를 사용하고 싶습니다. 나는 이것을 썼다 :

#!/usr/bin/make -f 

include /usr/share/cdbs/1/rules/debhelper.mk 
include /usr/share/cdbs/1/class/autotools.mk 

그러나 그것은 작동하지 않는다. configure 파일이 누락되었다고 불평합니다. 그리고 Autotools 클래스는이 파일이 존재하기를 기대하기 때문에 그렇습니다. 그러나 그것은 거기에 있지 않고 누군가 autoconf와 친구에게 먼저 전화해야합니다!

왜 Autotools가 CDBS 클래스는 나를 autoconf 친구를 호출하지 않습니다? 어떻게 우회합니까?

여담 : 나는이 프로그램을 사용하면

, 나는, 그 때마다 컴파일하지 않습니다 내가 한 번 컴파일하고 바이너리를 다시 사용합니다. 사람들이 소프트웨어를 설치하면

, 그들 자신에 의해 컴파일하지 않는, 개발자는 한 번 컴파일 사람들은 바이너리 패키지를 다시 사용합니다.

유지 관리자가 패키지를 컴파일 할 때 컴파일 할 때마다 configure 스크립트를 만들지 않으므로 업스트림 작성자가 한 번만 생성했으며 관리자는이를 다시 사용할 수 있습니다.

는 마지막 문장 사실인가요? 왜냐하면 Autotools CDBS 클래스의 작성자가 같은 것을 가정했기 때문에 그들은 다른 아키텍처의 패키지를 컴파일하는 동안 configure이 존재한다고 재촉합니다. 내가 맞습니까? configure가 생성 될 수있는 경우

한편으로, 그것은 어디서나 존재해서는 안 - 당신이 그것을 필요로하는 경우에, 당신은 다른 파일에서 생성 된. 반면에 Autotools CDBS 클래스의 작성자는이 방법으로 구현해야하는 몇 가지 이유가 있어야합니다.

요약 :

  • 내가 위에서 설명한 Autotools가 CDBS 클래스 문제를 해결하려면 어떻게합니까?
  • 얼마나 자주 configure를 재생합니까? (일반적으로 데비안 패키지를 구축 할 때.)

답변

1

Jasiu, 스크립트가 원 개발자에 의해 생성되며 일반적으로 다른 사람에 의해 재생 될 필요가없는 구성하는 것이 사실입니다

. 그러나 때로는 원래 구성에 문제가있는 경우 autotools (최신 버전의 autotools 또는 업데이트 된 m4 매크로 사용)를 실행하려고 할 수 있습니다. 당신이 등 configure.ac, Makefile.am, M4 매크로를 변경하는 경우에만

보통 당신이 autotools를 실행

autoconf를 충분히 새로운 BTW 경우 당신은 단지 구성을 생성하는 autoreconf를 호출 할 수 있습니다. 그러나 원래 구성에 문제가 없으면 그대로 두십시오.

+1

그러나'configure.ac '와'Makefile.am'에서'configure'를 생성 할 수 있다면, 우리는 항상 후자의 두 개를 배포하지 않아야합니까? 'configure '를 나에게 배포하는 것은 바이너리 파일을 저장소에 넣는 것과 같다. – Jasiu

+4

GNU 빌드 시스템은 tarball의 압축을 푼 직후'./configure && make && make install '이 필요하므로'configure'스크립트를 tarball에 배포해야합니다. Makefile.in, Bison 생성 파서, Texinfo 문서는 모두 다른 파일에서 생성되고 배포되므로 최종 사용자는 다시 생성하기 위해 도구를 설치할 필요가 없습니다. 저장소에 들어가는 내용은 사용자 tarball의 내용과 다릅니다. 개발자는 생성 된 파일을 생략하는 경우가 많습니다. 그러나 실행하는 것은 작업을 모두 재생성하는 것입니다. – adl

-1

일반적으로 배포본의 debian 패키지를 빌드해야합니다. 패키징중인 패키지를 알면됩니다. 일반적으로 tarball 패키지 인 VERSION.tar.gz입니다. 이 경우 일반적으로 config. {sub, guess}가 너무 오래되어 대상 시스템에서 실행할 수없는 경우를 제외하고는 autotools를 실행할 필요가 없습니다.

어쨌든, 당신은 많은 질문을하지만, 첫 번째는 문제를 기반으로 ".하지만이 작동하지 않는 그것은 구성 파일이없는 뿌려줍니다."

이것은 무엇이 실패했는지 설명하지 않습니다. 질문의 맨 위에있는 시퀀스에는 실행중인 ./configure이 있으므로 누락 될 수 없습니다.

configure은 autotools가 올바르게 실행될 때 항상 나타나므로 대부분의 질문은 다소 혼란 스럽습니다.

+0

CDBS는'configure' 스크립트가 이미 존재할 것으로 기대합니다. 우리가 얻은 소스는'configure 만 포함했다.ac'와'Makefile.am'을 사용합니다. SVN repo에 두 개를 넣었지만 두 개의 다른 스크립트에서 생성 될 수 있기 때문에'configure '를 거기에 넣고 싶지 않았습니다. 왜냐하면 CDBS는'configure'를 찾았 기 때문에 자동 패키지 빌드를 수행 할 수 없기 때문입니다. 왜 사람들은'configure' 스크립트로 소스를 배포합니까? 'configure.ac'와'Makefile.am'을 대신 배포할까요? – Jasiu

+0

@ Jasiu : 아니요, 안됩니다. configure는 최종 사용자가 Autoconf/Automake와 호스트에 대한 모든 의존성을 필요로하지 않도록 배포되어야합니다. (일부 패키지는 매우 특정 버전의 autotools도 사용합니다. 패키지를 설치하기 위해 autotools를 다운 그레이드하거나 업그레이드하도록 요청하는 것은 어리석은 일입니다.) – adl

+0

외부 배포판을 '공급 업체'로 사용하는 경우 모두 포함해야합니다 공급 업체 타르볼이 원래 하위 버전에 포함 된 파일. 소스 코드 방식을 사용하는 경우 autotools를 실행해야합니다. 위에서 말했듯이 구성 오류가있는 이유를 진단 할 수있는 오류 메시지를 언급하지 않습니다. autotools는 여러 가지 방법으로 실패 할 수 있습니다 - 로그를 제공하십시오. – dajobe

6

먼저, 너무 열심히 노력하고 있습니다. aclocal을 실행하는 대신 & & autoheader & & 등 ..., 을 실행하면 autoreconf를 실행할 수 있습니다. 이렇게하면 모든 autotools가 올바른 순서로 호출되고 (손가락과 뇌에서 더 쉽습니다). 둘째, configure 스크립트를 생성했으면 빌드 디렉토리를 만들고 'make dist'를 실행하여 deb 생성에 사용할 타르볼을 얻어야합니다. tarball에는 configure 스크립트가 있습니다. (더 나은 점은 업스트림에서 생성 된 tarball을 사용하고 autotools를 실행하는 것에 대해 걱정하지 않아도됩니다.)

0

"Autotools CDBS 클래스가 autoconf 및 친구에게 전화를 걸지 않는 이유는 무엇입니까? ? 나는 그것을 회피 할 "제가 한 일은 데비안/규칙 파일에 다음 규칙을 추가했다 :

makebuilddir은/your_package_name ::
autoreconf

--install는

이 규칙은 기본적으로 실행 autoreconf --install 명령 (configure 스크립트 f를 생성합니다 또는 configure.ac 및 Makefile.am 파일이있는 경우)을 패키지의 사전 구성 작업으로 사용하십시오. 목표 규칙은 여기에 문서화되어 있습니다 : http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml#id489203

adl과 마찬가지로 개발자는 configure 스크립트를 다시 생성하기 위해 autoreconf를 실행할 수 있어야하며 configure.ac 및 Makefile.am 파일 만 SVN에 체크인해야합니다. 그러나 소스가 최종 사용자에게 공개되면 최종 사용자가 구성 스크립트를 생성하지 않고 configure 스크립트를 실행할 수 있도록 configure 스크립트를 제공해야합니다.