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 使用说明 转载 ...
随机推荐
- 【题解】P3939数颜色
[题解]P3939 数颜色 不要数据结构和模板学傻了... 考虑到兔子们交换都是相邻的,说明任何一次交换只会引起\(O(1)\)的变化. 我们开很多\(vector\)存没种兔子的下标就好了.到时候二 ...
- (转) 在linux网络UDP通信中,关于客户端是否绑定的理解
最近在做一个实例,是用RTSP协议完成.服务器已经有了,只需要把客户端做好就行了,在做的过程中发现了一些问题,就是关于UDP客户端是否绑定的问题. 也许大家在书上看到的大多都是说UDP客户端不需要绑定 ...
- ceph分布式存储系统初探
前言 由于公司的业务调整,现在我又要接触ceph这个东西,由于我接手的是一个网盘类项目,所以分布式存储系统ceph就是我必须要学的了.现在压力还是比较大的,从业务直接到后台核心. 大概在这几天,我将c ...
- 【Leetcode-easy】Palindrome Number
思路:除和求余 取得首位和末尾 比较是否相等. public boolean isPalindrome(int x){ if(x<0){ return false; } int div=1; w ...
- html5--1.20 课程小结与若干点补充
html5--1.20 课程小结与若干点补充 学习要点: 1.第一章HTML5基础知识做一个小结2.对本章课程中部分内容做几点补充 课程小结 对本章的知识点做一个简单的回顾,并对其中个别知识点做若干补 ...
- 存储过程之rowtype 使用
CREATE OR REPLACE PROCEDURE "DYLYLQX_SC_BA_1" (YWID IN VARCHAR2, FLAG OUT VARCHAR2) IS V_R ...
- SENet(Squeeze-and-Excitation Networks)算法笔记---通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征
Momenta详解ImageNet 2017夺冠架构SENet 转自机器之心专栏 作者:胡杰 本届 CVPR 2017大会上出现了很多值得关注的精彩论文,国内自动驾驶创业公司 Momenta 联合机器 ...
- 【Lintcode】069.Binary Tree Level Order Traversal
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- 结合Django+celery二次开发定时周期任务
需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...
- bzoj 3714 [PA2014]Kuglarz——思路+最小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 如果用s[ i ]表示前 i 个的奇偶性,那么c(i_j)表示s[ i-1 ]^s[ ...