編寫configure.ac


configure.ac由一些宏組成(如果已經有源代碼,你可以運行autoscan來產生一個configure.scan文件,在此基礎修改成configure.ac將更加方便) 
最基本的組成可以是下面的

AC_INIT([PACKAGE], [VERSION], [BUG-REPORT-ADDRESS])
# Checks for programs.
# Checks for libraries.
# Checks for header les.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# Output les.
AC_CONFIG_FILES([FILES])
AC_OUTPUT

  

基本含義已經在上篇文章中介紹了,這里不再敘述。

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

autoconf 強制性初始化。告訴autoconf包名稱,版本,一個bug報告emall。 
例如:

AC_INIT([hello], [1.0], [bug-report@address])

並且這些名稱將出現在config.h,你可以在程序直接引用這些宏。

 

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "BUG-REPORT-ADDRESS"

/* Define to the full name of this package. */
#define PACKAGE_NAME "FULL-PACKAGE-NAME"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "FULL-PACKAGE-NAME VERSION"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "full-package-name"

/* Define to the version of this package. */
#define PACKAGE_VERSION "VERSION"

  

AC_PREREQ(VERSION)

需要的最低autoconf版本,如:AC_PREREQ([2.65])

AC_CONFIG_SRCDIR(FILE)

一個安全的檢查。FILE將是一個發布的源文件。這讓configure腳本確保自己運行在正確的目錄中。如:AC_CONFIG_SRCDIR([src/main.c])

AC_CONFIG_AUX_DIR(DIRECTORY)

配置輔助腳本位置,如install-sh和depcomp等。如:AC_CONFIG_AUX_DIR([build-aux])

AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77, …

編譯器檢測。

AC_PROG_SED, AC_PROG_YACC, AC_PROG_LEX, …

發現好的實現並且設置變量SED,YACC,$LEX等。

AC_CHECK_PROGS(VAR, PROGS, [VAL-IF-NOT-FOUND])

將VAR定義為第一個發現的程序,如果沒有發現就設置為VAL-IF-NOT-FOUND

AC_CHECK_PROGS([TAR], [tar gtar], [:])
if test "$TAR" = :; then
AC_MSG_ERROR([This package needs tar.])
fi

  

如果發現tar,gtar,就設置到變量$TAR中,如果沒有發現就是設置為‘:’

AC_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS])

打印錯誤信息ERROR-DESCRIPTION並退出,EXIT-STATUS設置退出狀態。

AC_MSG_WARN(ERROR-DESCRIPTION)

打印但是不退出。

AC_DEFINE(VARIABLE, VALUE, DESCRIPTION)

輸出到configu.h中。

/* DESCRIPTION */
#define VARIABLE VALUE

  

AC_SUBST(VARIABLE, [VALUE])

定義變量$VARIABLE=VALUE,進入Makefile。 
如:AC_SUBST([FOO],[foo]) 
等價於 
FOO=foo 
AC_SUBST([FOO]) 
或者 
AC_SUBST([FOO]) 
FOO=foo

AC_CHECK_LIB(LIBRARY, FUNCT, [ACT-IF-FOUND], [ACT-IF-NOT])

檢查庫是否存在並且包括函數FUNCT。如果發現庫就執行ACT-IF-FOUND,否則執行ACT-IF-NOT。 
例如:

AC_CHECK_LIB([efence], [malloc], [EFENCELIB=-lefence])
AC_SUBST([EFENCELIB])

  

稍后可以使用(EFENCELIB)使ACTIFFOUNDACCHECKLIBLIBS=lLIBRARYLIBS"和#dedefine HAVE_LIB{LIBRARY}。Autmake會在鏈接的時候使用$LIBS。

AC_CHECK_HEADERS(HEADERS…)

檢查頭HEADERS並且給每一個發現的頭文件定義#define HAVE_HEADER_H 
例如:

AC_CHECK_HEADERS([sys/param.h unistd.h])
AC_CHECK_HEADERS([wchar.h])

  

檢查sys/param.h unistd.h如果存在定義定義#define HAVE_SYS_PARAM_H,HAVE_UNISTD_H。 
注意:一般情況下不能轉換的符號都用‘_’代替。 
你可以在你的頭文件這么使用

#if HAVE_UNISTD_H
#include <unistd.h>
#endif

  

AC_CHECK_HEADER(HEADER, [ACT-IF-FOUND], [ACT-IF-NOT])

檢查一個頭文件。

AC_CONFIG_HEADERS(HEADERS…)

創建頭文件的HEADER.in,HEADERS包含使用AC_DEFINE的定義。 
例如: 
AC_CONFIG_HEADERS([config.h]) 
將從config.h.in創建config.h。

AC_CONFIG_FILES([Makefile sub/Makefile script.sh:script.in])

Automake創建FILE.in從每一個有FILE.am的FILE。他也可以出來非Makefile。 
script.in

#!/bin/sh
SED='@SED@'
TAR='@TAR@'
d=$1; shift; mkdir "$d"
for f; do
"$SED" 's/#.*//' "$f" \
>"$d/$f"
done
"$TAR" cf "$d.tar" "$d"

  

.in是文件模板。@SED@、@TAR@將被AC_SUBST([SED]),AC_SUBST([TAR])替換。這樣你就可以將配置中的變量傳送到其他文件中去。 
Makefile.in也使用@XYZ@作為替換部分,但是Automake已經做了將所有的XYZ=@XYZ@的定義,你只需要簡單使用$(XYZ)就可以了。

AM_INIT_AUTOMAKE([OPTIONS…])

檢查automake嘗試Makefile時的必要的工具。 
例如:AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
一些可選的選項:

選項 解釋
-Wall 打開全部警告
-Werror 將警告當錯誤處理
-foreign 放寬一些GNU標准需求
-1.11.1 需要automake的最低版本
-dist-bzip2 在使用make dist和make distcheck期間同時創建tar.bz2存檔
-tar-ustar 使用ustar格式創建tar存檔

AC_CONFIG_FILES([Makefile sub/Makefile])

寫入Makefile.am和sub/Makefile.am文件

AM CONDITIONAL(NAME, CONDITION)

定義一個條件名NAME,CONDITION將由shell解釋執行,如果成功NAME將被打開。 
舉例:configure.ac

AC_CHECK_HEADER([bar.h], [use_bar=yes])
AM_CONDITIONAL([WANT_BAR], [test "$use_bar" = yes])

  

僅當當前系統中存在bar.h文件時打開WANT_BAR。

具體細節可以參考 
gnu automake

 

原文鏈接:http://blog.csdn.net/john_crash/article/details/49889949


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM