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 使用说明 转载 ...
随机推荐
- Swift 学习笔记 (枚举)
枚举为一种相关值定义了一个通用类型,从而可以让你在代码中类型安全的操作这些值. Swift中的枚举很灵活,不需要给每一个枚举中的成员都提供值.如果一个值(所谓 原时值) 要被提供给每一个枚举成员,那么 ...
- php 身份证号码获取星座和生肖
发布:thatboy 来源:Net [大 中 小] 本文介绍下,php用身份证号码获取星座和生肖的方法,一个简单的php实例,从身份证号码中取得星座与生肖信息,有兴趣的朋友参考研究下吧.本 ...
- maven 手动安装本地jar包
1.需要知道groupId.artifactId.version通过 cmd命令行执行 mvn install:install-file ,比如安装sigar.jar如下: mvn install:i ...
- socketserver源码解读
在看源码之前我们先来看看有关继承的知识(看源码就是在找继承关系----个人理解) 继承 : 我们先看上面的代码,这是一个简单的类继承,我们可以看到父类Base和子类Son,它们中各有一个Test ...
- webpack-dev-server原理及要点笔记
webpack-dev-server启动了一个使用express的Http服务器,这个服务器与客户端采用websocket通信协议,当原始文件发生改变,webpack-dev-server会实时编译. ...
- BZOJ 3362 Navigation Nightmare
一道带权并查集题目. 带权并查集的重点是信息的合并. 这类题出现得并不多,练习一下. #include<bits/stdc++.h> using namespace std; #defin ...
- VLAN(虚拟局域网)划分
VLAN根据不同的需求,可以有多种划分方式: 一:静态划分 基于端口 按VLAN交换机上的物理端口和内部的PVC(永久虚电路)端口来划分 静态划分安全.可靠,易于配置与维护 二 ...
- 分享知识-快乐自己:SpringMvc后台Date对象数据 到 前台页面的显示转换
常常为日期格式的转换而烦恼吗?那么就试试看看楼主的方式吧!让你摆脱烦恼,从而快乐撸码. 如果你只用作于一个日期的显示采用方式如下: 导入:相应的类库 <%@ taglib uri="h ...
- javascript macrotask & microtask
先看一个 实例 案例 console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Pr ...
- Dom vs Canvas (译)
原文:dom_vs_canvas 在web上做动画我们有很多选择:svg,dom,canvas,flash等等.但是根据业务场景我们一定能找到最优的技术解决方案,但是何时选择dom,何时使用canva ...