寫完c語言代碼要部署到別的機器上,一個makefile檔案是必不可少的,make命令編譯c程式確實很方面,而makefile手動寫 由於文法複雜 而且不同於進階語言,所以手動寫出可正常使用的makefile成本太高,下面就介紹一下如何運用autoconf和automake兩個開源工具自動產生makefile
1.建立一個簡單的c程式檔案 main.c
內容如下:
1 #include <stdio.h>
2 int main()
3 {
4 printf("auto create makefile! ");
5 return 0;
6 }
2.在shell下運行autosan命令來產生autoscan.log configure.scan兩個檔案
3.重新命名configure.scan為configure.in (mv configure.scan configure.in)
4.修改configure.in 為符合自己條件的檔案
自動產生修改前的內容為:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
# 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_OUTPUT
修改後的為:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
#確保使用的是足夠新的Autoconf版本。如果用於建立configure的Autoconf的版本比version 要早,就在標準>錯誤輸出列印一條錯誤訊息並不會建立configure。
AC_PREREQ([2.69])
#初始化,定義軟體的基本資料,包括設定包的全稱,版本號碼以及報告BUG時需要用的郵箱地址
AC_INIT([main], [1.0], [zhanghaozheng@jiehun.com.cn])
#用來偵測所指定的源碼檔案是否存在,來確定源碼目錄的有效性
AC_CONFIG_SRCDIR([main.c])
#用於產生config.h檔案,以便autoheader使用
AC_CONFIG_HEADERS([config.h])
#添加宏AM_INIT_AUTOMAKE, 它是automake所必備的宏,也同前面一樣,PACKAGE是所要產生軟體套件的名稱,VERSION是版本編號。
AM_INIT_AUTOMAKE(main,1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
#建立輸出檔案。在`configure.in'的末尾調用本宏一次。
AC_OUTPUT([Makefile])
5.運行aclocal命令 產生 aclocal.m4 autom4te.cache兩個檔案
6.運行autoconf產生configure shell檔案
7.運行autoheader產生config.h.in檔案
8.下面開始準備運行automake命令產生makefile,不過在此之前要先寫一個automake所需要的設定檔 Makefile.am
內容為:
#automake提供了三種軟體等級:foreign、gnu和gnits,讓用 戶選擇採用,預設等級為gnu。在本例使用foreign等級,它只檢測必須的檔案
AUTOMAKE_OPTIONS=foreign
#定義要產生的執行檔案名稱。如果要產生多個執行檔案,每個檔案名稱用空格隔開
bin_PROGRAMS=main
#main_SOURCES定義“main”這個執行程式所需要的原始檔案。如果”main”這個程式是由多個原始檔案所產生的,
則必須把它所用到的 所有原 始檔案都列出來,並用空格隔開。
main_SOURCES=main.c
9.使用automake對其產生“configure.in”檔案,在這裡使用選項“—adding-missing”可以讓automake自動添加有一些必需的指令檔。運行 automake --add-missing
運行結果:
[work@zhz study_c]$ automake --add-missing
configure.in:17: installing `./install-sh'
configure.in:17: installing `./missing'
Makefile.am: installing `./depcomp'
10.運行configure ./configure 產生Makefile檔案供make使用
11.運行make命令 產生main可執行檔 ./main 執行此檔案輸出結果
[work@zhz study_c]$ ./main
auto create makefile!
12.大功告成,以後不用再對這些檔案感到莫名其妙了。開源的世界就是強大。