自動生成Linux下Makefile全攻略(上)

作爲Linux下的程序開發人員,大家一定都遇到過Makefile,用make命令來編譯自己寫的程序確實是很方便。一般情況下,大家都是手工寫一個簡單Makefile,如果要想寫出一個符合自由軟件慣例的Makefile就不那麼容易了。

  在本文中,將給大家介紹如何使用 autoconf和automake兩個工具來幫助我們自動地生成符合自由軟件慣例的Makefile,這樣就可以象常見的GNU程序一樣,只要使用“./configure”,“make”,“make install”就可以把程序安裝到Linux系統中去了。這將特別適合想做開放源代碼軟件的程序開發人員,又或如果你只是自己寫些小的Toy程序,那麼這個文章對你也會有很大的幫助。

  1.準備好程序 main.c

   main.c

   #include <stdio.h>

   int main()

  {

      print("hello!");

      return 0;

   }

  2.準備好腳本 autogen.sh  

   autogen.sh

    #!/bin/sh

    aclocal

    autoheader

    automake --add-missing

    autoconf

  3.運行autoscan 生成configure.scan

  4.mv configure.scan configure.ac

  5.在configure.ac 中修改

  AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

  爲 AC_INIT(hello, 0.0.1, [email protected])
  並添加 AM_INIT_AUTOMAKE 
AC_CONFIG_FILES([Makefile])

 configure.ac

  # -*- Autoconf -*-

  # Process this file with autoconf to produce a configure script.

  AC_PREREQ(2.59)

  #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

  AC_INIT(hello, 0.0.1, [email protected])

  AC_CONFIG_SRCDIR([main.c])

  AM_CONFIG_HEADER([config.h])

  AM_INIT_AUTOMAKE

  # Checks for programs.

  AC_PROG_CC

  # Checks for libraries.

  # Checks for header files.

  # Checks for typedefs, structures, and compiler characteristics.

  # Checks for library functions.

  AC_FUNC_MALLOC

  AC_CONFIG_FILES([Makefile])

  AC_OUTPUT

 6.準備好Makefile.am

 Makefile.am

  AUTOMAKE_OPTIONS = foreign

  bin_PROGRAMS = hello

  hello_SOURCES = main.c

  #noinst_HEADERS =

 7.運行autogen.sh    哼哼, 自動生成了makefile ! 

以上文件放在同一目錄下, 運行./autogen.sh && ./configure && make && ./test

利用 configure 所產生的 Makefile文件有幾個預先設定的目標可供使用,這裏只用幾個簡述如下:

  make all

  產生設定的目標,既範例中的可執行文件。只敲入make 也可以,此時會開始編譯源代碼,然後連接併產生執行文件。

  make clean

  清除之前所編譯的可執行文件及目標文件(object file, *.o)。

  make distclean

  除了清除可執行文件和目標文件以外,也把 configure 所產生的 Makefile 清除掉。 通常在發佈軟件前執行該命令。

  make install

  將程序安裝到系統中,若源碼編譯成功,且執行結果正確,便可以把程序安裝到系統預先設定的執行文件存放路徑中,若用 bin_PROGRAMS 宏的話,程序會被安裝到 /usr/local/bin下。

  make dist

  將程序和相關的文檔包裝爲一個壓縮文檔以供發佈 (distribution) 。執行完在目錄下會產生一個以 PACKAGE-VERSION.tar.gz 爲名稱的文件!

  make distcheck

  和 make dist 類似,但是加入檢查包裝以後的壓縮文件是否正常,這個目標除了把程序和相關文檔包裝成 tar.gz 文件外,還會自動把這個壓縮文件解開,執行 configure,並執行 make all ,確認編譯無錯誤以後,方顯示這個 tar.gz 文件已經準備好並可以發佈了。


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