Atuomake contents
参考:http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/index.html
为什么要有automake这样的工具?
在看GitHub json project时看到这些.所以写了这篇博客记录学到的东东.
automake
比make
更好.原因(见手册P13):
- 自动依赖跟踪
automatic dependency tracking
- 递归构建(子目录也支持)
recursive builds in subdirectories
- 可靠的时间戳(用于网络项目)
reliable timestamps
总之就是
automake
比make
方便.所以你要用,而且这个工具是可以构建不同的系统之间的package.这样你就不需要面对用户的不同系统配置时发生错误而买单.就是发行软件时很方便,用户也很方便,维护也很方便.
没有比较CMake
ubuntu 安装
sudo apt install autoconf
sudo apt install libtool
整体观
The GNU Build System 是由三个核心组件组成:
- Autoconf
- Automake
- Libtool
各种命令
autoscan
不是给用户用的,而是帮助程序员的
在安装autoconf时
autoscan
可以帮助程序员自动创建configure.ac
.
autoscan
可以检查源代码的目录树.有以下两种方式:
- 一种是给定参数,这个参数是源代码的根目录.
- 另一种是不给参数,
autoscan
会扫描当前的目录.
执行autoscan
过后会生成configure.scan
,你只需要重命名为configure.ac
然后根据需要更改里面的内容,就相当于gnu给你了模板.
执行过后:
不仅如此,autoscan
还生成了autoscan.log
这个文件用来说明哪些宏是必须的原因.
autoheader
创建一个含有#define的头文件来供configure
去使用.
autoheader
会产生一个一个config.h.in
而configure
程序会生成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
语法规则:
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