2009-06-25 35 views
3

在我的公司,我目前正在創建一個Debian軟件包deb了一個第三方庫的。該庫使用Autotools構建。我之前從未與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和朋友!

爲什麼自動工具CDBS類不讓我叫autoconf和朋友嗎?我如何繞過它?

題外話:

當我使用一個程序,我不每次編譯它,我曾經編譯和重新使用二進制。

當人們安裝軟件,他們不自己編譯,編譯維護一次,人們重複使用的二進制軟件包。

當維護人員編譯軟件包時,他/她在每次編譯時都不會創建configure腳本,上游作者創建一次並且維護人員可以重用它。

是最後那句話是真的嗎?因爲對我來說,似乎Autotools CDBS類的作者認爲這樣的事情 - 他們假設存在configure,並在編譯不同體系結構的包時重用它。我對嗎?

一方面,如果configure可以生成,它不應該存在任何地方 - 如果你需要它,你從其他文件生成。另一方面,Autotools CDBS類的作者必須有某種理由以這種方式來實現它,而不是另一種。

摘要:

  • 我該如何處理與上述自動工具CDBS類的問題?
  • 我要隔多久再生configure? (一般來說,建設Debian軟件包時。)

回答

1

Jasiu,

該配置腳本由上游作者創建,通常並不需要由其他人進行再生這是真的。但有時,當原始配置有問題時,可能需要運行autotools(使用更新版本的自動工具或更新的m4宏)。

通常運行自動工具,只有當你改變configure.ac,Makefile.am,m4宏等

BTW如果autoconf的夠新,你可以叫autoreconf生成配置。但是,如果原始配置沒有問題,請保持原樣。

+1

但是如果`configure`可以從`configure.ac`和`Makefile.am`生成,我們不應該總是分配後兩個嗎?將`configure`分配給我就像將二進制文件放入存儲庫一樣。 – Jasiu 2009-06-29 20:07:14

+4

GNU構建系統需要`./configure && make && make install`才能解壓縮tarball,因此'configure'腳本應該在tar包中分發。它不是我們想要分發的唯一生成的文件:Makefile.in,Bison生成的解析器,Texinfo文檔都是從其他文件生成的,並且是分佈式的,因此最終用戶不需要安裝工具來重新生成它們。 存儲庫中的內容與用戶tarball中的內容不同。開發人員經常會忽略生成的文件,但是他們的工作是重新生成所有文件。 – adl 2009-07-01 12:37:18

-1

您通常應該從發佈版本構建debian軟件包,以便您知道自己正在打包什麼 - 通常是tarball package-VERSION.tar.gz。在這種情況下,通常不需要運行自動工具,除了config。{sub,guess}太舊並且無法在目標系統上運行的情況。

反正你問了很多問題,但第一個是基於問題:「不過,這並不工作,它抱怨 該配置文件丟失。」

這並不能解釋失敗的原因。問題頂部的序列包括運行./configure,以便它不會丟失。

configure在自動工具正確運行時總是存在,所以後面的大部分問題都會讓您感到困惑。

6

首先,你工作太辛苦。而不是運行aclocal & & autoheader & & etc ..., 你可以運行autoreconf。這將確保所有自動工具以正確的順序被調用(並且在手指和大腦上更容易)。其次,一旦生成了配置腳本,您應該創建一個構建目錄並運行'make dist'來獲取將用於生成deb的tarball。 tarball將會有配置腳本。 (更好的是,只使用上游生成的壓縮包,根本不用擔心運行自動工具。)

0

要回答「爲什麼Autotools CDBS類不讓我給autoconf和朋友打電話? ?做我繞過它」,我所做的是添加以下規則到debian/rules文件:

makebuilddir/your_package_name ::
autoreconf --install

這個規則基本上運行autoreconf --install命令(它會生成配置腳本f或者如果configure.ac和Makefile.am文件存在)作爲你的包的預配置操作。目標規則記錄在這裏:http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml#id489203

像ADL說,開發人員應該能夠運行autoreconf重新生成配置腳本爲他們的發展,因此,只有configure.ac和Makefile.am文件應檢查到SVN。但是,將源發佈給最終用戶時,應該提供配置腳本,以便最終用戶可以運行配置腳本,而無需使用工具生成配置腳本。