使用Autotools宏、变量配置flat目录的Makefile[二]
文章目录
软件目录结构
Flat
所有的文件都存放在同一个目录下
Shallow
主程序源文件放在顶层目录中
各个模块文件放在各个子目录中
Deep
所有源文件都存放在各个子目录中
Makefile.am语法
- 主要有宏、变量组成
- 各个变量定义生成需要被编译、链接的目标、依赖源文件、要安装的目录等
- 工具automake根据这些目标和源文件添加规则,生成makefile.in
- 少量的makefile语法、注释等
- 在makefile.am定义的makefile代码将被添加到makefile.in的合适位置
- 注释使用##表示,不会被输出到Makefile.in
Automake的宏、变量
文件编译类型 | 说明 |
---|---|
_PROGRAMS | 表示生成目标是可执行文件 |
_LIBRARIES | 生成目标为库文件 |
_LTLIBRARIES | 使用LIBTOOL生成库文件 |
_HEADERS | 头文件 |
_DATA | 数据文件、配置文件等 |
数据文件、配置文件等 | 值 |
---|---|
bindir | $(prefix)/bin |
libdir | $(prefix)/lib |
datadir | $(prefix)/share |
sysconfdir | $(prefix)/etc |
includedir | $(prefix)/include |
$(top_srcdir) | 工程顶层目录 |
$(top_builddir) | 目标文件顶层目录 |
noinst | 不安装 |
编译配置 | 说明 |
---|---|
_SOURCES | 目标依赖的源文件 |
_LIBADD | 生成库时需要链接的其它库 |
_LDADD | 链接需要链接的库 |
_LDFLAGS | 链接选项:-I /-L/-shared/-fPIC |
_LIBTOOLFLAGS | Libtool编译选项 |
其它变量 | 说明 |
---|---|
INCLUDES | 链接所需头文件 |
SUBDIRS | 递归处理子目录 |
EXTRA_DIST | 打包文件或目录 |
Makfile.am示例
Configure.ac文件语法
宏 | 说明 | 备注 |
---|---|---|
AC_INI | 一般以此开头 | AC_INIT |
AC_PROG_CC | 检测C编译器,C项目需要设置此宏 | 检查编译器 |
AC_CONFIG_SRC_DIR | 项目源文件 | 检测函数库 |
AC_CONFIG_HEADERS | 配置头文件 | 检查头文件 |
AC_CHECK_LIB | 检测lib库中是否有指定函数 | 检查函数定义类型 |
AC_PROG_LIBTOOL | 使用libtool生成动态共享库 | |
AC_PROG_RANLIB | 静态库 | |
AC_OUTPUT | 设置configure输出的Makefile文件 | |
AC_CONFIG_FILES([Makefile]) | 用于生成相应的Makefile | |
AM_INIT_AUTOMAKE | 运行Automake必需的宏 | |
dnl或# | 注释标志 |