说明

从零开始编写automake工程非常复杂也没有必要,我们只要能看懂开源项目的automake即可,然后根据自己实际情况进行修改即可,下面给出两个比较好的参考项目,其中spice-gtk涵盖了使用libtool生成动态库的方法,后面所有的教程都是根据这两个模板进行改编

spice-gtk

virt-viewer

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 -vfiintltoolize --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使用说明的更多相关文章

  1. DBProxy 读写分离使用说明

    美团点评DBProxy读写分离使用说明   目的 因为业务架构上需要实现读写分离,刚好前段时间美团点评开源了在360Atlas基础上开发的读写分离中间件DBProxy,关于其介绍在官方文档已经有很详细 ...

  2. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  3. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  4. 第4月第1天 makefile automake

    1. gnu make的函数调用是$,比如 $(subst ee,EE,feet on the street) 规则中“TARGETS”可以是空格分开的多个文件名 a all: echo $(subs ...

  5. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  6. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  7. Map工具系列-02-数据迁移工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  8. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  9. jQuery验证控件jquery.validate.js使用说明

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

随机推荐

  1. 关于Wix的源代码

    Wix的源代码有两种方式可以获得,以3.8为例: 在Release的页面下载wix38-debug.zip 通过SourceCode页面下载,http://wix.codeplex.com/Sourc ...

  2. 我的Java开发学习之旅------>Java经典排序算法之插入排序

    一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69,  42" 我们从第二个数字开始,这个数字是27,我们的 ...

  3. 使用appium和testng实现Android自动截图

    简单介绍 需求场景是:当测试安卓应用的脚本得到失败结果时,对当前手机屏幕截图,便于查找问题. 实现方式是:1)定义一个父类UITest,作为所有测试类的父类.在父类中UITest中定义一个截图的方法, ...

  4. hadoop磁盘空间不均衡的解决办法

    hadoop集群在运行一段时间后,总是会出现某台机器的磁盘使用率特别高,有的使用率特别低,针对这种情况,hadoop提供了balancer工具调整磁盘负载 使用命令:start-balancer.sh ...

  5. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  6. PAT 天梯赛 L2-025. 分而治之 【图】

    题目链接 https://www.patest.cn/contests/gplt/L2-025 思路 只要把被攻下的城市标记一下 与 其他城市之间的通路都取消 然后判断一下剩下的城市 是否都是孤立的 ...

  7. 使用阿里云maven镜像加速jar包下载

    编辑 MAVEN_HOME/conf 文件夹下的 settings.xml,找到 <mirrors> 节点,把下面内容添加在其子节点内: <mirror> <id> ...

  8. 51nod 1537

    题目 神犇题解 证明好巧妙,给跪OTZ 题目的式子:$ {\left( {1{\rm{ + }}\sqrt 2 } \right)^{\rm{n}}} $,设其乘开之后为 $ {\rm{a + b}} ...

  9. 51nod 1737配对

    题意:给定一个n个点的带边权树,  保证n是偶数,给这个树两两配对,使得配对后的点路径和最大,输出最大值. 其实是个很简单的题,但还是被绊了.这充分说明现在连简单题都做不来了555 单独考虑每条边.每 ...

  10. html5--1.4元素的属性

    html5--1.4元素的属性 学习要点: 1.了解HTML元素属性2.学习两个属性:align和bgcolor 属性的作用就是就为元素提供更多的信息,大多数元素都可以拥有属性 属性的语法:<标 ...