Autotools快速開發

程序開發需要注意的細節很多,不僅需要用戶有良好的技術,而且還需要開發利器幫助用戶化難爲易。在此介紹AutoTools工具在程序開發中的幾個應用,幫助用戶瞭解它是如何在程序開發中發揮作用,有什麼便利之處。

    源碼路徑

    這裏要研究的是在工程中如何指定源程序代碼的路徑。假設在hello1目錄中,用戶不將hello.c直接放在測試目錄下,而是放在下一級子目錄src下。一般開源軟件的源碼都這麼設置。那麼應該如何處理呢?首先在hello1目錄下編輯configure.ac文件,內容如下:

AC_INIT(src/hello.c)
AM_INIT_AUTOMAKE(hello, 0.1)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile)


    其中第四行指定在執行configure腳本後的兩個輸出文件,即當前目錄下的Makefile和src目錄下的Makefile。

    再編輯Makefile.am文件,內容如下:
    SUBDIRS = src

    它用來指定用戶的工程目錄中都包含哪些子目錄。目前用戶只有一個源程序目錄src,在以後的工程中用戶可以加入文檔目錄doc、測試目錄test等。
    然後在src目錄中編輯Makefile.am文件,內容如下:

bin_PROGRAMS = hello
hello_SOURCES = hello.c


    編輯完成,確認無誤後,在工程目錄中依次執行“aclocal”、“autoconf”和“automake --add-missing --foreign -copy”命令,至此用戶已經完成了此工程的創建。執行“./configure”來生成Makefile文件。最後執行“make”命令在src目錄中生成可執行文件hello。

    多個輸出結果

    如果源程序代碼有兩個C源文件在同一個目錄假定爲hello2裏面,並且輸出兩個可執行文件,那麼這種情況應該如何處理呢?

    首先進入hello2子目錄,像上面的例子那樣,創建源代碼目錄src。在src目錄下編輯兩個C源程序hello.c和oh.c。下一步在目錄hello2中編輯configure.ac文件,內容如下:

AC_INIT(src/hello.c)
AM_INIT_AUTOMAKE(hello, 0.2)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile)


    與hello1工程中的configure.ac的內容相仿,不同的是這次的版本變了。

    再編輯Makefile.am文件,這裏與hello1工程的一模一樣。需要指出的是src目錄下的Makefile.am文件要做出改動,內容如下:

bin_PROGRAMS = hello oh
hello_SOURCES = hello.c
oh_SOURCES = oh.c


    需要注意的是多個輸出結果在bin_PROGRAMS後指出就可以了。但每個可執行文件都要指定源代碼文件,hello對應的源代碼爲hello.c,oh對應的源代碼爲oh.c。

    編輯完相關配置文件後,就可以依次執行“aclocal”、“autoconf”和“automake”了。

    打包方式

    用戶正常用的源程序代碼打包後,文件名的後綴是.tar.gz。這是最常用的打包方式。但它的壓縮率並不是最高的。壓縮率更好的壓縮方式是採用bz2格式。前提是保證用戶的系統安裝有bzip2壓縮工具。

    將hello2工程的源碼複製到本工程目錄的src目錄下,在工程目錄中編輯Configure.ac文件,內容和hello2中的Configure.ac一樣。

    在工程目錄中的Makefile.am文件內容如下:

AUTOMAKE_OPTIONS = dist-bzip2
SUBDIRS = src


    子目錄中的Makefile.am文件內容與上一工程中的完全相同。再執行“aclocal”等相關命令創建工程,接着在用“make”編譯完成後,可以用“make dist”來打包,最後會在工程目錄下出現兩個壓縮包hello-0.2.tar.gz和hello-0.2.tar.bz2。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章