1. 程式人生 > >autoconf&automake使用小結

autoconf&automake使用小結

    今天被這個東西折磨了一天,其實就是因為改變了wireshark的程式碼想把它重新編譯,但是有沒有辦法弄懂他的makefile,只能在原有的基礎之上進行一些修改來使用。我們實際上主要修改了gtk目錄的一些介面來嘗試一下,但是悲劇的是根本無從下手。和大部分開源軟體一樣,wireshark的makefiles是用automake自動生成的。囧啊~~~所以不得不研究了一下這個automake工具了。

    網上還是有些資料是可以參考以下的:

http://linux.chinaunix.net/techdoc/system/2009/02/05/1060775.shtml

https://www.ibm.com/developerworks/cn/linux/l-makefile/

    整個流程大概如下,每步的作用也做了簡要說明:(轉)

1. 原始碼根目錄呼叫autoscan指令碼,生成configure.scan檔案,然後將此檔案重新命名為configure.ac(configure.in,早期使用.in字尾)

2. 修改【configure.ac,利用autoconf提供的各種M4巨集,配置專案需要的各種自動化探測專案

3. 編寫【自定義巨集】,建議每個巨集一個單獨的*.m4檔案;

4. 呼叫aclocal收集configure.ac中用到的各種非Autoconf的巨集,包括自定義巨集;

5. 呼叫autoheader,掃描configure.ac(configure.in)

acconfig.h(如果存在),生成config.h.in巨集定義檔案,裡面主要是根據configure.ac中某些特定巨集(AC_DEFINE)生成的#define#undefine巨集,configure在將根據實際的探測結果決定這些巨集是否定義(具體見後面例子)。

6. 按照automake規定的規則和專案的目錄結構,編寫一個或多個【Makefile.am(Makefile.am數目和存放位置和原始碼目錄結構相關)Makefile.am主要寫的就是編譯的目標及其原始碼組成。

7. 呼叫automake,將每個Makefile.am轉化成Makefile.in,同時生成滿足GNU

編碼規範的一系列檔案(帶-a選項自動新增缺少的檔案,但有幾個仍需要自己新增,在執行automake前需執行touch NEWS README AUTHORS ChangeLog)。如果configure.ac配置了使用libtool(定義了AC_PROG_LIBTOOL巨集(老版本)或LT_INIT巨集),需要在此步驟前先在專案根目錄執行libtoolize --automake --copy --force,以生成ltmain.sh,供automakeconfig.status呼叫。

8. 呼叫autoconf,利用M4解析configure.ac,生成shell指令碼configure。以上幾步完成後,開發者的工作就算完成了,後面的定製就由開源軟體的使用者根據需要給configure輸入不同的引數來完成。

9. 使用者呼叫configure,生成Makefile,然後make && make install

  說穿了就是在工程目錄下執行一系列命令,建立和修改幾個檔案,就可以生成符合該平臺的Makefile檔案。

   具體使用的時候,首先我們進入 project 目錄:

1) 執行autoscan命令

2) 將configure.scan 檔案重新命名為configure.in,並修改configure.in檔案

3) 在project目錄下新建Makefile.am檔案,並在各個子目錄下也新建makefile.am檔案

4) 在project目錄下新建NEWS、 README、 ChangeLog 、AUTHORS檔案

5) 將/usr/share/automake-1.X/目錄下的depcomp和complie檔案拷貝到本目錄下

6) 執行aclocal命令

7) 執行autoconf命令

8) 執行automake -a命令

9) 執行./confiugre指令碼

   可以通過圖看出產生Makefile的流程,如圖所示:


    就按上面的,我先把gtk資料夾的makefile.am檔案修改一下。比如我添加了兩個檔案1.c,2.c,我就得在makefile.am中對應的列舉原始碼常量的位子給寫上這兩個檔案。

然後就試圖automake生成makefile.in檔案,可是它老說我的automake是和工程中不匹配,建議我aclocal,結果我執行aclocal後就報錯了類似macro `AM_PATH_GTK 3_0' not found in library之類的錯誤,好糾結啊~~一直不明白為啥,甚至吧configure裡AM_PATH_GTK 3_0巨集刪掉,但是那樣在編譯的時候會產生一些異常的錯誤。糾結了許久之後,在一個國外網站

https://github.com/pruby/GNUnet-Mirror  

發現這個

If you receive an error during the
running of ". bootstrap" that looks like "macro `AM_PATH_GTK' not
found in library", you may need to run aclocal by hand with the -I
option, pointing to your aclocal m4 macros, i.e.

$ aclocal -I /usr/local/share/aclocal

    亂試了一通後,突然想起來有個aclocal-fallback的檔案加下面有一些類似的東西,就運行了aclocal -I aclocal-fallback 結果就可以正常編譯了。網上還是有蠻多的教程的,不過感覺都是在對幾個helloword在舉例,到了面對wireshark這種龐大的開源軟體的時候,還真的有點束手,希望後面好過點,少浪費時間了~~

相關推薦

autoconf&automake使用小結

    今天被這個東西折磨了一天,其實就是因為改變了wireshark的程式碼想把它重新編譯,但是有沒有辦法弄懂他的makefile,只能在原有的基礎之上進行一些修改來使用。我們實際上主要修改了gtk目錄的一些介面來嘗試一下,但是悲劇的是根本無從下手。和大部分開源軟體一樣,

解決安裝yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel後無法連接mysql

pan isa linu mage exp aio memory compress bsp 查看mysqld.log 日誌: mysql日誌 171210 19:38:22 [Note] Plugin ‘FEDERATED‘ is disabled. 1712

autoconf automake libtool m4

弄懂autoscan, autoconf, automake, Makefile.am 之前一直把所有的h檔案和c檔案都放在同一個目錄下,用的是通用Makefile,現在覺得需要現代化一點,於是進行了一些改造,分多個目錄,多級目錄,因此,學習一下autoscan,aclocal,autoconf

弄懂autoscan, autoconf, automake, Makefile.am

之前一直把所有的h檔案和c檔案都放在同一個目錄下,用的是通用Makefile,現在覺得需要現代化一點,於是進行了一些改造,分多個目錄,多級目錄,因此,學習一下autoscan,aclocal,autoconf,automake這些工具的使用。 本文不是講解這些工具用法的,只

安裝 Autoconf, Automake & Libtool

nbsp 出現 csdn 解決 btool apt-get tar.gz clas config 今天在使用sudo apt-get install命令安裝autoconf和automake時,出現了問題,說是不能sudo apt-get install安裝這些軟件似乎不是

cmake與autoconf+automake的對比

      首先,拿他們對比本身沒有太多的意義,他們都是產生makefile檔案的工具。cmake產生的晚,解決了很多autotools工具的問題。autotools是一個工具集具有強大的靈活性,但是因為步驟太多,配置繁瑣,產生了很多的替代方案,cmake是其中

【探索wireshark】 使用autoconf, automake等自動生成Makefile

     無論是在Linux還是在Unix環境中,make都是一個非常重要的編譯命令。不管是自己進行專案開發還是安裝應用軟體,我們都經常要用到make或 make install。利用make工具,我們可以將大型的開發專案分解成為多個更易於管理的模組,對於一個包括幾百個

autoconf / automake工具使用介紹

測試 執行Make命令進行編譯。然後執行hello程式 三、深入 四、深入淺出   針對上面提到的各個命令,我們再做些詳細的介紹。   1、 autoscan   autoscan是用來掃描原始碼目錄生成configure.scan檔案的。autoscan可以用目錄名做為引數,但如果你不使用引數的話

手動安裝m4, autoconf, automake, libtool

安裝m4 wget http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz \ && tar -xzvf m4-1.4.13.tar.gz

Mac OS 中安裝 autoconfautomake

span pan blog rest makefile autoconf clas nal and 你需要安裝很多東西,請按照以下順序安裝: 安裝的版本包也不能錯: curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.ta

大型項目使用Automake/Autoconf完成編譯配置

3.2 sources 開發者 封裝 根據 行程 能夠 rip 規範 使用過開源C/C++項目的同學們都知道,標準的編譯過程已經變成了簡單的三部曲:configure/make/make install, 使用起來很方便,不像平時自己寫代碼,要手寫一堆復雜的Makefile

autoconfautomake

efi font pan 另一個 onf 腳本 automake 簡單的 ron 概念 使用autoconf、automake 程序開發人員只需要寫一些簡單的含有預定義宏的文件, 由autoconf根據一個宏文件生成configure, 由automake根據另一個宏文件生

例解 autoconfautomake 生成 Makefile 檔案

引子 無論是在Linux還是在Unix環境中,make都是一個非常重要的編譯命令。不管是自己進行專案開發還是安裝應用軟體,我們都經常要用到make或 make install。利用make工具,我們可以將大型的開發專案分解成為多個更易於管理的模組,對於一個包括幾百個原始檔的

瞭解automakeautoconf(autoreconf)

 通過這篇文章可以瞭解auotmake和autoconf的基本工作流程,文章講的通俗易懂,但是版本較老。瞭解新版本的automake可以參考automake的WiKi主頁Automake,通過下圖可以很清晰的瞭解auomake和autoconf是如何生成configure

【configure】如何用automakeautoconf指令生成configure並建立自己的linux tar.gz安裝包【初級篇:簡單建立-測試】

$ tree 2048-c/ 2048-c/ ├── 2048.c ├── 2048.h └── main.c 0 directories, 3 files 然後進入資料夾,執行autoscan生成configure.scan檔案 $ cd 2048-c/ $ ls

超簡單!!centos 6離線原始碼編譯安裝升級gcc、binutils、automakeautoconf

centos 6系列的Linux發行版,是非常成功(具足UNIX精神)的發行版,可能大家都已經用得非常習慣了。 但問題是,其核心及附帶的工具軟體,版本卻都非常老了。 centos 7上的軟體版本雖然比較新,但centos 7設計風格的突變(主要是引入了很不符合UNIX精神的systemd),可能在業

autoconfautomake實踐

2010-11-11 周海漢 2010.11.11 光棍不再 linux程式原始碼編譯三部曲: ./configure make make install 非常省事。一個configure可以為多變環境生成不同的makefil

autoconfautomake的使用

[email protected]:~/Desktop/demo$ ls main.c [email protected]:~/Desktop/demo$ cat main.c #include <stdio.h> int main(int argc, cha

運用AutoconfAutomake生產Makefile的學習之路

Makefile makefile用來定義整個工程的編譯規則。一個工程的原始檔按照型別、功能、模組分別放在若干個子目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作

使用automake autoconf生成Makefile dh-make釋出deb

使用automake,autoconf生成Makefile,dh-make釋出deb包 這就是主要流程圖,所必須安裝的幾個東西:automake dh-make devscripts 具體操作: 一:編寫原始碼 $ vim helloworl