zoukankan      html  css  js  c++  java
  • Automake使用说明

    说明

    从零开始编写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>,而不要自定义
    
  • 相关阅读:
    FreeIPA部署及基本使用
    第7天:Django模板使用与表单
    第6天:数据库配置与模型
    第5天:基于类的视图与中间件
    linux下修改MySQL表名与表的字符编码
    webService理解(一)
    查询MySQL库下所有表名,数据为空的表名
    linux中MySQL连接找不到mysql.sock文件
    初步书写Webservice项目,运行后报错:Cannot assign requested address: bind
    linux配置jdk,MySQL环境
  • 原文地址:https://www.cnblogs.com/silvermagic/p/7665868.html
Copyright © 2011-2022 走看看