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 使用说明 转载 ...
随机推荐
- 列举Python常用数据类型并尽量多的写出其中的方法
#1 把字符串的第一个字符大写 string.capitalize() #2 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string.center(width) #3 返回 ...
- javascript实现日期时间动态显示
.aspx代码例如以下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Def ...
- Java基础教程:HashTable与HashMap比较
Java基础教程:HashTable与HashMap比较 1. 关于HashMap的一些说法: a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...
- iOS 使用GitHub托管代码
1.注册一个github账号在官网.https://github.com/github 2.下载mac版的github客户端.网址:https://desktop.github.com 3.之后会在出 ...
- Macaca,app-inspector安装
1.安装brew 软件包管理工具:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst ...
- 郝健: Linux内存管理学习笔记-第1节课【转】
本文转载自:https://blog.csdn.net/juS3Ve/article/details/80035751 摘要 MMU与分页机制 内存区域(内存分ZONE) LinuxBuddy分配算法 ...
- jQuery(expression, [context])
jQuery(expression, [context]) 返回值:jQuery 概述 这个函数接收一个包含 CSS 选择器的字符串,然后用这个字符串去匹配一组元素. jQuery 的 ...
- html5--2.9新的布局元素(5)-hgroup/address
html5--2.9新的布局元素(5)-hgroup/address 学习要点 了解hgroup/address元素的语义和用法 通过实例理解hgroup/address元素的用法 对照新元素布局与d ...
- codeforces 705B B. Spider Man(组合游戏)
题目链接: B. Spider Man time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Qt之log数据展示模块简要实现
Log模块主要用于实时测井数据的显示和测后曲线数据的预览和打印,为更好的展示对Qt中相关知识点的应用,特以Log模块为例对其进行简要实现. 内容导图: 一.功能需求 1.界面效果图 Log模块实现曲线 ...