Automake使用说明
说明
从零开始编写automake工程非常复杂也没有必要,我们只要能看懂开源项目的automake即可,然后根据自己实际情况进行修改即可,下面给出两个比较好的参考项目,其中spice-gtk涵盖了使用libtool生成动态库的方法,后面所有的教程都是根据这两个模板进行改编
configure.ac宏定义说明
宏 | 作用 | 示例 |
---|---|---|
AC_PREREQ | autoconf最低版本 | AC_PREREQ([2.69]) |
AC_INIT | 初始化包信息,将会自动生成PACKAGE_NAME、PACKAGE_VERSION、PACKAGE_BUGREPORT宏 | AC_INIT([Porject], [1.0], [fwdssg.love@163.com]) |
AC_CONFIG_SRCDIR | 通过检测目录中必定存在的文件来判断目录是否存在 | AC_CONFIG_SRCDIR([src/main.cpp]) |
AC_CONFIG_HEADERS | 生成config.h文件保存configure.ac定义的宏,此文件可被源文件包含 | AC_CONFIG_HEADERS([config.h]) |
AC_CONFIG_MACRO_DIRS | 指定本地宏文件的存放目录,.m4后缀的文件都将被保存进此目录,acloacl命令会自动创建此目录 | AC_CONFIG_MACRO_DIRS([m4]) |
AC_CONFIG_AUX_DIR | 指定辅助脚本文件的存放目录 | AC_CONFIG_AUX_DIR([build-aux]) |
AC_MSG_CHECKING | 打印"checking XXX ..." | AC_MSG_CHECKING([for native Win32]) |
AC_MSG_RESULT | 打印checking结果并另起新行 | AC_MSG_RESULT([$os_win32]) |
AC_PROG_INSTALL | 生成安装脚本 install-sh | AC_PROG_INSTALL |
AC_PROG_LIBTOOL | 使得configure能够支持--enable-shared、--disable-shared、--enable-static、--disable-static、--with-pic和--without-pic参数 | AC_PROG_LIBTOOL |
AC_PROG_CXX | 自动检测要使用的C++编译器 | AC_PROG_CXX |
AC_PROG_CC | 自动检测要使用的C编译器 | AC_PROG_CC |
AC_CHECK_HEADERS | 检测系统头文件是否存在 | AC_CHECK_HEADERS([sys/socket.h netinet/in.h arpa/inet.h]) |
AC_SUBST | 输出能够被Makefile.am使用的变量 | AC_SUBST(GLIB2_CFLAGS) |
AC_CONFIG_SUBDIRS | configure子目录 | AC_CONFIG_SUBDIRS([spice-common]) |
PKG_CHECK_MODULES | 检测对应模块是否存在 | PKG_CHECK_MODULES([SPICE_PROTOCOL], [spice-protocol >= 0.12.11]) |
AC_CHECK_FUNCS | 检测对应函数是否可用 | AC_CHECK_FUNCS([setlocale]) |
AC_ARG_ENABLE | 为configure添加--XX选项 | AC_ARG_ENABLE([gstaudio],AS_HELP_STRING([--enable-gstaudio=@<:@yes/auto/no@:>@], [Enable the GStreamer 1.0 audio backend @<:@default=auto@:>@]),[],[enable_gstaudio="auto"]) |
AC_OUTPUT | 运行configure后生成的config脚本需要处理的文件,将Makefile.in变成Makefile | AC_OUTPUT([Makefile]) |
AM_INIT_AUTOMAKE | 初始化automake | AM_INIT_AUTOMAKE([subdir-objects -Wno-portability]) |
AM_GNU_GETTEXT | 初始化gettext | AM_GNU_GETTEXT([external]) |
AM_GNU_GETTEXT_VERSION | 指定gettext最低版本 | AM_GNU_GETTEXT_VERSION([0.19.7]) |
IT_PROG_INTLTOOL | 初始化并指定libtool最低版本 | IT_PROG_INTLTOOL([0.35.0]) |
AM_CONDITIONAL | 根据条件来定义宏 | AM_CONDITIONAL([OS_WIN32],[test "$os_win32" = "yes"]) #如果$os_win32的值为yes则#define OS_WIN32宏 |
Makefile.am宏定义说明
宏 | 作用 | 示例 |
---|---|---|
ACLOCAL_AMFLAGS | 指定宏文件的存放目录,与AC_CONFIG_MACRO_DIRS成配合使用 | ACLOCAL_AMFLAGS = -I m4 |
SUBDIRS | 指定需要递归automake的子文件夹,即存在Makefile.am的子文件夹 | SUBDIRS = spice-common src man po doc data |
EXTRA_DIST | 指定要被打包的额外文件,即执行make dist 时需要被放入压缩包的文件,一般是不需要参与编译但是又需要被使用的文件,比如图片目录里的图片 |
EXTRA_DIST = $(PACKAGE).spec |
DISTCLEAN_FILES | 执行make distclean 时候需要删除的文件,一般是EXTRA_DIST中的.in文件生成的不需要打包的中间文件 |
DISTCLEAN_FILES = $(PACKAGE).spec |
MAINTAINERCLEANFILES | 执行make maintainer-clean时候需要删除的文件,即执行autoreconf -vfi 、intltoolize --force 以及configure 或执行autogen.sh 后能够重新生成的文件都要放入其中 |
MAINTAINERCLEANFILES = $(srcdir)/AUTHORS |
dist-hook | 执行make dist 时需要执行的脚本 |
dist-hook: gen-ChangeLog gen-AUTHORS |
bin_PROGRAMS | 要生成的可执行文件 | bin_PROGRAMS = spicy |
XX_SOURCES | 编译可执行文件所需的源文件 | spicy_SOURCES = spicy.c |
XX_LIBADD | 链接参数,即pkg-config --libs 的结果 |
spicy_stats_LDADD = libspice-client-glib-2.0.la |
XX_CFLAGS | 编译参数,即pkg-config --cflags 的结果和-D 之类的宏定义 |
libvirt_viewer_la_CFLAGS = -DLOCALE_DIR=""./../share/locale"" $(GLIB2_CFLAGS) |
nodist_XX_SOURCES | 执行make dist 时不需要被打包的源文件,一般是根据其他源文件通过脚本临时生成的中间源文件,比如使用glib-genmarshal 生成的文件 |
nodist_libspice_client_glib_2_0_la_SOURCES = spice-marshal.c spice-marshal.h |
LDADD | 无法被configure找到但是又需要链接的库或资源文件,例如临时生成的windows下使用的rc文件 | LDADD += virt-viewer_rc.$(OBJEXT) |
dist_XX_DATA | 程序运行需要的数据文件,比如图标、配置文件等 | dist_cfg_DATA = xx.cfg |
dist_bin_SCRIPTS | 程序的脚本文件,将被安装到bin目录 | dist_bin_SCRIPTS = xx.sh |
实际问题处理
- 想在代码中使用
SYSCONFDIR
等路径怎么办?
# 在对应源文件的Makefile.am中添加
CPPFLAGS = -DSYSCONFDIR='"$(sysconfdir)"'
- 怎么提取glade文件的国际化字符串
# 编辑POTFILES.in文件
[type: gettext/glade] src/filename.glade
- 语言国际化textdomain加载成功但是程序却没翻译
# Ubuntu
语言必须带后缀.utf8,即LANG=zh_CN.utf8而不能直接使用LANG=zh_CN
# Fedora
使用系统头文件#include <glib/gi18n.h>,而不要自定义
Automake使用说明的更多相关文章
- DBProxy 读写分离使用说明
美团点评DBProxy读写分离使用说明 目的 因为业务架构上需要实现读写分离,刚好前段时间美团点评开源了在360Atlas基础上开发的读写分离中间件DBProxy,关于其介绍在官方文档已经有很详细 ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- 第4月第1天 makefile automake
1. gnu make的函数调用是$,比如 $(subst ee,EE,feet on the street) 规则中“TARGETS”可以是空格分开的多个文件名 a all: echo $(subs ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Map工具系列-03-代码生成BySQl工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- jQuery验证控件jquery.validate.js使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
随机推荐
- 【docker】kubernetes集群一键部署包
背景说明: 随着docker使用的逐步深入,docker的管理变得越来越麻烦,单纯的通过docker命令行的方式进行管理已经不能满足需求,同时也存在效率低下的问题.所以急需一个docker集群管理工具 ...
- [数据挖掘课程笔记]无监督学习——聚类(clustering)
什么是聚类(clustering) 个人理解:聚类就是将大量无标签的记录,根据它们的特点把它们分成簇,最后结果应当是相同簇之间相似性要尽可能大,不同簇之间相似性要尽可能小. 聚类方法的分类如下图所示: ...
- Qt — tableWidget插入复选框
之前不太了解Qt中的相关控件,一直尝试直接在tableview上增加复选框. 但相对来说,在tableview增加复选框的工作量与麻烦程度远超tableWidget. 接下来是如何在Qt的tableW ...
- python -- redis连接与使用
前面我们简单介绍了redis nosql数据库,现在我们在python里面来使用redis. 一.python连接redis 在python中,要操作redis,目前主要是通过一个python-red ...
- 7-10 括号匹配(25 分) 【STL】
7-10 括号匹配(25 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行中给出一行字 ...
- mysql父子查询
https://segmentfault.com/a/1190000007531328
- Laravel的初始化安装
Laravel的初始化安装 composer 安装 composer中国镜像laravel文档 curl -sS https://getcomposer.org/installer | php # 修 ...
- html(HyperText Markup Language)--超文本标记语言
1.html的简介? * 什么是html? ** HyperText Markup Language:超文本标记语言,网页语言 ** 超文本:超出文本的范畴,使用html可以轻松实现这样操作: ** ...
- BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线:spfa + 二分【路径中最大边长最小】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1614 题意: 给你一个无向图,n个点,m条边. 你需要找出一条从1到n的路径,使得这条路径 ...
- struts2的通配符与动态方法调用
1.Action标签中的method属性 我们知道action默认的执行的方法是execute方法,但是一个action只执行一个方法我们觉得有点浪费,我们希望在一个action中实现同一模块的不同功 ...