iT邦幫忙

DAY 26
0

21世紀C語言實作及感想系列 第 26

21世紀C語言之26:Auto Tools (3)

  • 分享至 

  • xImage
  •  

一般在真實情況下,撰寫程式,當然不會只有一個**.c** 源碼檔,常常會有多個**.c, .h** 源碼檔.

或是一個函式庫,

較複雜的例子,源碼有:

$ ls
dict_use.c dict.c dict.h dict_test.c keyval.h keyval.c

然後自己編一個Automake.am

AM_CFLAGS=pkg-config --cflags glib-2.0 -O3 -Wall

lib_LTLIBRARIES=libdict.la
libdict_la_SOURCES=dict.c keyval.c

include_HEADERS=keyval.h dict.h

bin_PROGRAMS=dict_use
dict_use_SOURCES=dict_use.c
dict_use_LDADD=libdict.la

TESTS=$(check_PROGRAMS)
check_PROGRAMS=dict_test
dict_test_LDADD=libdict.la

經過autoscan 指令,產生 configure.scan 檔,

和昨晚的極簡單一個源碼檔(hello.c),掃描出了一些不一樣的巨集。

-*- 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([keyval.h])
AC_CONFIG_HEADERS([config.h])

Checks for programs.

AC_PROG_CC

Checks for libraries.

Checks for header files.

AC_CHECK_HEADERS([stdlib.h strings.h])

Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([strcasecmp])

AC_CONFIG_FILES([makefile])
AC_OUTPUT

這有點人工智慧在裏面,因為你指定了程式碼有那些? 這個autoscan指令會去讀源碼裏的引用庫,

自動會多產生一些相對應的檢查,例如上面的粗黑字部分的**# Checks for library functions.**

及**# Checks for header files.** 看起來是把源碼中的引用庫抄來這裏,

這裏介紹一下

AC_XXXXX 這些m4語言的巨集。

AC_INIT() ,這裏放3個參數,第一個是套件的全名,第二個是版本號,第三個是臭蟲報告地址。

昨晚提到的AM_INIT_AUTOMAKE,是讓automake產生makefile, 如果沒有加上去,就不會產生makefile. 預設狀態下不產生

LT_INIT 設定Libtool, 目前還沒用到,這和共用函式庫有關。

AC_CONFIG_FILES(makefile , 子目錄中的makefile),

AC_OUTPUT 產出結果。

AC_PROG_CC,AC_PROG_CC_C99 , 看得出是符合C99的標準。

如果要多檢查一些函式庫,可以用

AC_CHECK_LIB([glib-2.0],[g_free])

自動工具會雞婆的幫你加上額外的兩個檔,

Makefile.am: installing './INSTALL'
Makefile.am: installing './COPYING' using GNU General Public License v3 file
Makefile.am: Consider adding the COPYING file to the version control system
Makefile.am: for your code, to avoid questions about which license your project uses

一個是GPL v3 的授權檔:COPYING。一個是INSTALL(原來是程式auto tool產生的啊!!)

自己編makefile, 還是用auto tools來編呢?

兩者都有優點!!


上一篇
21世紀C語言之25:Auto Tools (2)
下一篇
21世紀C語言之27: doxygen
系列文
21世紀C語言實作及感想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言