Autoconf 手册笔记和json项目实践



参考:http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/index.html

为什么要有automake这样的工具?

在看GitHub json project时看到这些.所以写了这篇博客记录学到的东东.
automakemake 更好.原因(见手册P13):

  1. 自动依赖跟踪 automatic dependency tracking
  2. 递归构建(子目录也支持) recursive builds in subdirectories
  3. 可靠的时间戳(用于网络项目) reliable timestamps

总之就是automakemake方便.所以你要用,而且这个工具是可以构建不同的系统之间的package.这样你就不需要面对用户的不同系统配置时发生错误而买单.就是发行软件时很方便,用户也很方便,维护也很方便.
没有比较CMake

ubuntu 安装

sudo apt install autoconf
sudo apt install libtool

整体观

The GNU Build System 是由三个核心组件组成:

  1. Autoconf
  2. Automake
  3. Libtool

autoscanf
generate *
autoconff
source file*
configure.scan*
configure.ac*
configure script*

在这里插入图片描述

各种命令

autoscan

不是给用户用的,而是帮助程序员的
在安装autoconf时

autoscan可以帮助程序员自动创建configure.ac .
autoscan可以检查源代码的目录树.有以下两种方式:

  1. 一种是给定参数,这个参数是源代码的根目录.
  2. 另一种是不给参数,autoscan会扫描当前的目录.

执行autoscan过后会生成configure.scan,你只需要重命名为configure.ac然后根据需要更改里面的内容,就相当于gnu给你了模板.

执行过后:

configure.scan
不仅如此,autoscan还生成了autoscan.log这个文件用来说明哪些宏是必须的原因.
autoscan.log

autoheader

创建一个含有#define的头文件来供configure去使用.

autoheader会产生一个一个config.h.inconfigure程序会生成configure.h
那为啥这么做呢?搞那么多就为了生成一个configure.h 手册也做了说明P44-4.9.2-Using autoheader to Create confgure.h.in

autoconf

autoconf 是架在了shell上,这种设计原因手册也说了详细见手册P15-3.1.1 A Shell Script Compiler

Autoconf*
shell *

语法规则:

macro_name([arg1],[arg2]...)

宏名和小括号之间不能有空格,参数用中括号括起来.当然手册也说了可以不要,但没必要纠结什么时候不要,我都加上不就好了.能简洁到哪里?

automake

automake 是从Makefile.am中生成Makefile.in文件的工具
在这里插入图片描述

#*****************************************************************************
# Copyright (c), Recep Aslantas.                                             *
#                                                                            *
# MIT License (MIT), http://opensource.org/licenses/MIT                      *
# Full license can be found in the LICENSE file                              *
#                                                                            *
#*****************************************************************************

# autoconf command version need to bigger than 2.69 
AC_PREREQ([2.69])

# package name | version | bug reports address
AC_INIT([json], [0.1.5], [info@recp.me])

#set automake variable 
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])

AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC
AM_PROG_CC_C_O

AC_PROG_INSTALL
AM_PROG_AR

AC_ENABLE_SHARED
AC_ENABLE_STATIC

LT_INIT

# Checks for libraries.
AC_CHECK_LIB([c], [strlen, strncmp, calloc, free])

m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_SYS_LARGEFILE

# Checks for header files.
AC_CHECK_HEADERS([limits.h \
                  stddef.h \
                  stdint.h \
                  stdlib.h \
                  string.h ])

# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_INT32_T
AC_TYPE_INT64_T
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T

# Checks for library functions.
AC_FUNC_ERROR_AT_LINE

AC_CONFIG_FILES([makefile])

AC_OUTPUT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值