偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

關(guān)于GNU Autotools的介紹

開發(fā) 項(xiàng)目管理
對(duì)于開發(fā)人員來說,Autotools 是一種管理和打包源代碼的快捷方式,以便用戶可以編譯和安裝軟件。 Autotools 也得到了主要打包格式(如 DEB 和 RPM)的良好支持,因此軟件存儲(chǔ)庫的維護(hù)者可以輕松管理使用 Autotools 構(gòu)建的項(xiàng)目。

[[273721]]

如果你仍未使用過 Autotools,那么這篇文章將改變你遞交代碼的方式。

你有沒有下載過流行的軟件項(xiàng)目的源代碼,要求你輸入幾乎是儀式般的 ./configure; make && make install 命令序列來構(gòu)建和安裝它?如果是這樣,你已經(jīng)使用過 GNU Autotools 了。如果你曾經(jīng)研究過這樣的項(xiàng)目所附帶的一些文件,你可能會(huì)對(duì)這種構(gòu)建系統(tǒng)的顯而易見的復(fù)雜性感到害怕。

好的消息是,GNU Autotools 的設(shè)置要比你想象的要簡單得多,GNU Autotools 本身可以為你生成這些上千行的配置文件。是的,你可以編寫 20 或 30 行安裝代碼,并免費(fèi)獲得其他 4,000 行。

Autotools 工作方式

如果你是初次使用 Linux 的用戶,正在尋找有關(guān)如何安裝應(yīng)用程序的信息,那么你不必閱讀本文!如果你想研究如何構(gòu)建軟件,歡迎閱讀它;但如果你只是要安裝一個(gè)新應(yīng)用程序,請(qǐng)閱讀我在在 Linux 上安裝應(yīng)用程序的文章。

對(duì)于開發(fā)人員來說,Autotools 是一種管理和打包源代碼的快捷方式,以便用戶可以編譯和安裝軟件。 Autotools 也得到了主要打包格式(如 DEB 和 RPM)的良好支持,因此軟件存儲(chǔ)庫的維護(hù)者可以輕松管理使用 Autotools 構(gòu)建的項(xiàng)目。

Autotools 工作步驟:

  1. 首先,在 ./configure 步驟中,Autotools 掃描宿主機(jī)系統(tǒng)(即當(dāng)前正在運(yùn)行的計(jì)算機(jī))以發(fā)現(xiàn)默認(rèn)設(shè)置。默認(rèn)設(shè)置包括支持庫所在的位置,以及新軟件應(yīng)放在系統(tǒng)上的位置。
  2. 接下來,在 make 步驟中,Autotools 通常通過將人類可讀的源代碼轉(zhuǎn)換為機(jī)器語言來構(gòu)建應(yīng)用程序。
  3. 最后,在 make install 步驟中,Autotools 將其構(gòu)建好的文件復(fù)制到計(jì)算機(jī)上(在配置階段檢測到)的相應(yīng)位置。

這個(gè)過程看起來很簡單,和你使用 Autotools 的步驟一樣。

Autotools 的優(yōu)勢

GNU Autotools 是我們大多數(shù)人認(rèn)為理所當(dāng)然的重要軟件。與 GCC(GNU 編譯器集合)一起,Autotools 是支持將自由軟件構(gòu)建和安裝到正在運(yùn)行的系統(tǒng)的腳手架。如果你正在運(yùn)行 POSIX 系統(tǒng),可以毫不保守地說,你的計(jì)算機(jī)上的操作系統(tǒng)里大多數(shù)可運(yùn)行軟件都是這些這樣構(gòu)建的。

即使是你的項(xiàng)目是個(gè)玩具項(xiàng)目不是操作系統(tǒng),你可能會(huì)認(rèn)為 Autotools 對(duì)你的需求來說太過分了。但是,盡管它的名氣很大,Autotools 有許多可能對(duì)你有益的小功能,即使你的項(xiàng)目只是一個(gè)相對(duì)簡單的應(yīng)用程序或一系列腳本。

可移植性

首先,Autotools 考慮到了可移植性。雖然它無法使你的項(xiàng)目在所有 POSIX 平臺(tái)上工作(這取決于你,編碼的人),但 Autotools 可以確保你標(biāo)記為要安裝的文件安裝到已知平臺(tái)上最合理的位置。而且由于 Autotools,高級(jí)用戶可以輕松地根據(jù)他們自己的系統(tǒng)情況定制和覆蓋任何非最佳設(shè)定。

使用 Autotools,你只要知道需要將文件安裝到哪個(gè)常規(guī)位置就行了。它會(huì)處理其他一切。不需要可能破壞未經(jīng)測試的操作系統(tǒng)的定制安裝腳本。

打包

Autotools 也得到了很好的支持。將一個(gè)帶有 Autotools 的項(xiàng)目交給一個(gè)發(fā)行版打包者,無論他們是打包成 RPM、DEB、TGZ 還是其他任何東西,都很簡單。打包工具知道 Autotools,因此可能不需要修補(bǔ)、魔改或調(diào)整。在許多情況下,將 Autotools 項(xiàng)目結(jié)合到流程中甚至可以實(shí)現(xiàn)自動(dòng)化。

如何使用 Autotools

要使用 Autotools,必須先安裝它。你的發(fā)行版可能提供一個(gè)單個(gè)的軟件包來幫助開發(fā)人員構(gòu)建項(xiàng)目,或者它可能為每個(gè)組件提供了單獨(dú)的軟件包,因此你可能需要在你的平臺(tái)上進(jìn)行一些研究以發(fā)現(xiàn)需要安裝的軟件包。

Autotools 的組件是:

  • automake
  • autoconf
  • automake
  • make

雖然你可能需要安裝項(xiàng)目所需的編譯器(例如 GCC),但 Autotools 可以很好地處理不需要編譯的腳本或二進(jìn)制文件。實(shí)際上,Autotools 對(duì)于此類項(xiàng)目非常有用,因?yàn)樗峁┝艘粋€(gè) make uninstall 腳本,以便于刪除。

安裝了所有組件之后,現(xiàn)在讓我們了解一下你的項(xiàng)目文件的組成結(jié)構(gòu)。

Autotools 項(xiàng)目結(jié)構(gòu)

GNU Autotools 有非常具體的預(yù)期規(guī)范,如果你經(jīng)常下載和構(gòu)建源代碼,可能大多數(shù)都很熟悉。首先,源代碼本身應(yīng)該位于一個(gè)名為 src 的子目錄中。

你的項(xiàng)目不必遵循所有這些預(yù)期規(guī)范,但如果你將文件放在非標(biāo)準(zhǔn)位置(從 Autotools 的角度來看),那么你將不得不稍后在 Makefile 中對(duì)其進(jìn)行調(diào)整。

此外,這些文件是必需的:

  • NEWS
  • README
  • AUTHORS
  • ChangeLog

你不必主動(dòng)使用這些文件,它們可以是包含所有信息的單個(gè)匯總文檔(如 README.md)的符號(hào)鏈接,但它們必須存在。

Autotools 配置

在你的項(xiàng)目根目錄下創(chuàng)建一個(gè)名為 configure.ac 的文件。autoconf 使用此文件來創(chuàng)建用戶在構(gòu)建之前運(yùn)行的 configure shell 腳本。該文件必須至少包含 AC_INIT 和 AC_OUTPUT M4 宏。你不需要了解有關(guān) M4 語言的任何信息就可以使用這些宏;它們已經(jīng)為你編寫好了,并且所有與 Autotools 相關(guān)的內(nèi)容都在該文檔中定義好了。

在你喜歡的文本編輯器中打開該文件。AC_INIT 宏可以包括包名稱、版本、報(bào)告錯(cuò)誤的電子郵件地址、項(xiàng)目 URL 以及可選的源 TAR 文件名稱等參數(shù)。

AC_OUTPUT 宏更簡單,不用任何參數(shù)。

  1. AC_INIT([penguin], [2019.3.6], [[seth@example.com][8]])
  2. AC_OUTPUT

如果你此刻運(yùn)行 autoconf,會(huì)依據(jù)你的 configure.ac 文件生成一個(gè) configure 腳本,它是可以運(yùn)行的。但是,也就是能運(yùn)行而已,因?yàn)榈侥壳盀橹鼓闼龅木褪嵌x項(xiàng)目的元數(shù)據(jù),并要求創(chuàng)建一個(gè)配置腳本。

你必須在 configure.ac 文件中調(diào)用的下一個(gè)宏是創(chuàng)建 Makefile 的函數(shù)。 Makefile 會(huì)告訴 make 命令做什么(通常是如何編譯和鏈接程序)。

創(chuàng)建 Makefile 的宏是 AM_INIT_AUTOMAKE,它不接受任何參數(shù),而 AC_CONFIG_FILES 接受的參數(shù)是你要輸出的文件的名稱。

最后,你必須添加一個(gè)宏來考慮你的項(xiàng)目所需的編譯器。你使用的宏顯然取決于你的項(xiàng)目。如果你的項(xiàng)目是用 C++ 編寫的,那么適當(dāng)?shù)暮晔?nbsp;AC_PROG_CXX,而用 C 編寫的項(xiàng)目需要 AC_PROG_CC,依此類推,詳見 Autoconf 文檔中的 Building Programs and Libraries 部分。

例如,我可能會(huì)為我的 C++ 程序添加以下內(nèi)容:

  1. AC_INIT([penguin], [2019.3.6], [[seth@example.com][8]])
  2. AC_OUTPUT
  3. AM_INIT_AUTOMAKE
  4. AC_CONFIG_FILES([Makefile])
  5. AC_PROG_CXX

保存該文件?,F(xiàn)在讓我們將目光轉(zhuǎn)到 Makefile。

生成 Autotools Makefile

Makefile 并不難手寫,但 Autotools 可以為你編寫一個(gè),而它生成的那個(gè)將使用在 ./configure 步驟中檢測到的配置選項(xiàng),并且它將包含比你考慮要包括或想要自己寫的還要多得多的選項(xiàng)。然而,Autotools 并不能檢測你的項(xiàng)目構(gòu)建所需的所有內(nèi)容,因此你必須在文件 Makefile.am 中添加一些細(xì)節(jié),然后在構(gòu)造 Makefile 時(shí)由 automake 使用。

Makefile.am 使用與 Makefile 相同的語法,所以如果你曾經(jīng)從頭開始編寫過 Makefile,那么這個(gè)過程將是熟悉和簡單的。通常,Makefile.am 文件只需要幾個(gè)變量定義來指示要構(gòu)建的文件以及它們的安裝位置即可。

以 _PROGRAMS 結(jié)尾的變量標(biāo)識(shí)了要構(gòu)建的代碼(這通常被認(rèn)為是原語primary目標(biāo);這是 Makefile 存在的主要意義)。Automake 也會(huì)識(shí)別其他原語,如 _SCRIPTS、_ DATA、_LIBRARIES,以及構(gòu)成軟件項(xiàng)目的其他常見部分。

如果你的應(yīng)用程序在構(gòu)建過程中需要實(shí)際編譯,那么你可以用 bin_PROGRAMS 變量將其標(biāo)記為二進(jìn)制程序,然后使用該程序名稱作為變量前綴引用構(gòu)建它所需的源代碼的任何部分(這些部分可能是將被編譯和鏈接在一起的一個(gè)或多個(gè)文件):

  1. bin_PROGRAMS = penguin
  2. penguin_SOURCES = penguin.cpp

bin_PROGRAMS 的目標(biāo)被安裝在 bindir 中,它在編譯期間可由用戶配置。

如果你的應(yīng)用程序不需要實(shí)際編譯,那么你的項(xiàng)目根本不需要 bin_PROGRAMS 變量。例如,如果你的項(xiàng)目是用 Bash、Perl 或類似的解釋語言編寫的腳本,那么定義一個(gè) _SCRIPTS 變量來替代:

  1. bin_SCRIPTS = bin/penguin

Automake 期望源代碼位于名為 src 的目錄中,因此如果你的項(xiàng)目使用替代目錄結(jié)構(gòu)進(jìn)行布局,則必須告知 Automake 接受來自外部源的代碼:

  1. AUTOMAKE_OPTIONS = foreign subdir-objects

最后,你可以在 Makefile.am 中創(chuàng)建任何自定義的 Makefile 規(guī)則,它們將逐字復(fù)制到生成的 Makefile 中。例如,如果你知道一些源代碼中的臨時(shí)值需要在安裝前替換,則可以為該過程創(chuàng)建自定義規(guī)則:

  1. all-am: penguin
  2.         touch bin/penguin.sh
  3.        
  4. penguin: bin/penguin.sh
  5.         @sed "s|__datadir__|@datadir@|" $< >bin/$@

一個(gè)特別有用的技巧是擴(kuò)展現(xiàn)有的 clean 目標(biāo),至少在開發(fā)期間是這樣的。make clean 命令通常會(huì)刪除除了 Automake 基礎(chǔ)結(jié)構(gòu)之外的所有生成的構(gòu)建文件。它是這樣設(shè)計(jì)的,因?yàn)榇蠖鄶?shù)用戶很少想要 make clean 來刪除那些便于構(gòu)建代碼的文件。

但是,在開發(fā)期間,你可能需要一種方法可靠地將項(xiàng)目返回到相對(duì)不受 Autotools 影響的狀態(tài)。在這種情況下,你可能想要添加:

  1. clean-local:
  2.         @rm config.status configure config.log
  3.         @rm Makefile
  4.         @rm -r autom4te.cache/
  5.         @rm aclocal.m4
  6.         @rm compile install-sh missing Makefile.in

這里有很多靈活性,如果你還不熟悉 Makefile,那么很難知道你的 Makefile.am 需要什么。最基本需要的是原語目標(biāo),無論是二進(jìn)制程序還是腳本,以及源代碼所在位置的指示(無論是通過 _SOURCES 變量還是使用 AUTOMAKE_OPTIONS 告訴 Automake 在哪里查找源代碼)。

一旦定義了這些變量和設(shè)置,如下一節(jié)所示,你就可以嘗試生成構(gòu)建腳本,并調(diào)整缺少的任何內(nèi)容。

生成 Autotools 構(gòu)建腳本

你已經(jīng)構(gòu)建了基礎(chǔ)結(jié)構(gòu),現(xiàn)在是時(shí)候讓 Autotools 做它最擅長的事情:自動(dòng)化你的項(xiàng)目工具。對(duì)于開發(fā)人員(你),Autotools 的接口與構(gòu)建代碼的用戶的不同。

構(gòu)建者通常使用這個(gè)眾所周知的順序:

  1. $ ./configure
  2. $ make
  3. $ sudo make install

但是,要使這種咒語起作用,你作為開發(fā)人員必須引導(dǎo)構(gòu)建這些基礎(chǔ)結(jié)構(gòu)。首先,運(yùn)行 autoreconf 以生成用戶在運(yùn)行 make 之前調(diào)用的 configure 腳本。使用 -install 選項(xiàng)將輔助文件(例如符號(hào)鏈接)引入到 depcomp(這是在編譯過程中生成依賴項(xiàng)的腳本),以及 compile 腳本的副本(一個(gè)編譯器的包裝器,用于說明語法,等等)。

  1. $ autoreconf --install
  2. configure.ac:3: installing './compile'
  3. configure.ac:2: installing './install-sh'
  4. configure.ac:2: installing './missing'

使用此開發(fā)構(gòu)建環(huán)境,你可以創(chuàng)建源代碼分發(fā)包:

  1. $ make dist

dist 目標(biāo)是從 Autotools “免費(fèi)”獲得的規(guī)則。這是一個(gè)內(nèi)置于 Makefile 中的功能,它是通過簡單的 Makefile.am 配置生成的。該目標(biāo)可以生成一個(gè) tar.gz 存檔,其中包含了所有源代碼和所有必要的 Autotools 基礎(chǔ)設(shè)施,以便下載程序包的人員可以構(gòu)建項(xiàng)目。

此時(shí),你應(yīng)該仔細(xì)查看存檔文件的內(nèi)容,以確保它包含你要發(fā)送給用戶的所有內(nèi)容。當(dāng)然,你也應(yīng)該嘗試自己構(gòu)建:

  1. $ tar --extract --file penguin-0.0.1.tar.gz
  2. $ cd penguin-0.0.1
  3. $ ./configure
  4. $ make
  5. $ DESTDIR=/tmp/penguin-test-build make install

如果你的構(gòu)建成功,你將找到由 DESTDIR 指定的已編譯應(yīng)用程序的本地副本(在此示例的情況下為 /tmp/penguin-test-build)。

  1. $ /tmp/example-test-build/usr/local/bin/example
  2. hello world from GNU Autotools

去使用 Autotools

Autotools 是一個(gè)很好的腳本集合,可用于可預(yù)測的自動(dòng)發(fā)布過程。如果你習(xí)慣使用 Python 或 Bash 構(gòu)建器,這個(gè)工具集對(duì)你來說可能是新的,但它為你的項(xiàng)目提供的結(jié)構(gòu)和適應(yīng)性可能值得學(xué)習(xí)。

而 Autotools 也不只是用于代碼。Autotools 可用于構(gòu)建 Docbook 項(xiàng)目,保持媒體有序(我使用 Autotools 進(jìn)行音樂發(fā)布),文檔項(xiàng)目以及其他任何可以從可自定義安裝目標(biāo)中受益的內(nèi)容。 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2023-01-11 12:06:15

2010-01-06 17:26:59

2009-12-24 15:04:40

ADO管理

2021-05-24 19:31:58

AutotoolsCMakeLinux

2009-06-17 16:01:28

2010-05-26 17:39:38

Linux性能監(jiān)控

2010-05-26 18:52:28

Linux 查看性能

2010-03-16 14:46:37

2010-07-16 11:53:20

2010-03-16 12:11:03

無線UWB技術(shù)

2010-03-16 11:16:52

無線ZigBee技術(shù)

2010-03-31 16:36:35

Windows CE

2009-06-11 10:00:05

Java Socket

2009-11-09 17:55:13

WCF緩存

2009-12-07 18:33:31

WCF Service

2011-08-18 10:06:10

2012-07-06 15:04:56

UBM Media

2010-01-22 11:06:03

GNUkFreeBSDLinux

2011-06-07 10:15:38

GNULinux

2010-06-17 14:54:08

Rsync 使用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)