Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236766
  • 博文数量: 36
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-22 20:55
文章分类

全部博文(36)

文章存档

2008年(4)

2007年(32)

我的朋友

分类: C/C++

2007-03-22 21:45:36

1、准备好目录树(一般情况下请将源码扔/src目录)

2、运行autoscan && mv configure.scan configure.ac && rm -f autoscan*

修 改configure.ac,去掉AC_INIT后面括号里的东西,增加AM_INIT_AUTOMAKE(你的包名, 包版本号),并将AC_CONFIG_HEADER改为AM_CONFIG_HEADER,删除掉AC_CONFIG_FILES,改AC_OUTPUT 为AC_OUTPUT(Makefile src/Makefile po/Makefile.in),用AC_CONFIG_FILES在automake时会报错。

3、注意加上你程序中用到的库和头文件检测语句,看起来应如下所示:
AC_INIT()
AM_INIT_AUTOMAKE(dsrc, 0.1)
AM_CONFIG_HEADER(config.h)

# Checks for programs.
AC_PROG_CC
AC_PROG_INTLTOOL

# Checks for libraries.
# PKG_CHECK_MODULES可直接在Makefile.am中引用$(xxx_CFLAGS)和$(xxx_LIBS)
PKG_CHECK_MODULES(xml2, [xml2])
PKG_CHECK_MODULES(openssl, [openssl])

AC_CHECK_LIB([pthread], [main])

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([arpa/inet.h libintl.h locale.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T

# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([inet_ntoa memset setlocale socket strcasecmp strncasecmp])

# gettext
GETTEXT_PACKAGE=dsrc
AC_SUBST(GETTEXT_PACKAGE)

ALL_LINGUAS="zh_CN"
AM_GLIB_GNU_GETTEXT

AC_OUTPUT([
Makefile
src/Makefile
po/Makefile.in
])

4、准备/Makefile.am
SUBDIRS = src po

dsrcdocdir = ${prefix}/doc/dsrc
dsrcdoc_DATA = \
README\
COPYING\
AUTHORS\
ChangeLog\
INSTALL\
NEWS

EXTRA_DIST = $(dsrcdoc_DATA)

其实这个内容非常简单,一看就明白了,上面所列的EXTRA_DIST为需要安装到/usr/share/doc下的东西,如果你还有其它文档可以加到这个列表中

5、准备src/Makefile.am
INCLUDES = -DLOCALEDIR=\""$(prefix)/share/locale"\"
AM_CFLAGS = -DDEBUG -g $(xml2_CFLAGS)
LIBS = $(xml2_LIBS) $(openssl_LIBS) -lpthread
# AM_LDFLAGS =

bin_PROGRAMS = dsrc
dsrc_SOURCES = main.c security.c XML_utils.c DSRC_handler.c DSRC_builder.c
# dsrc_CFLAGS =
# dsrc_LDFLAGS =

如 果会生成多个执行文件可为bin_PROGRAMS增加文件名即可,以空格隔开,下面对每个执行文件需要的源文件定义为xxx_SOURCES即可,如果 某执行文件编译参数以及链接参数也可以单独设置:xxx_CFLAGS、xxx_LDFLAGS,不过我建议库文件链接参数直接在 configure.ac里AC_CHECK_LIB了事,来得方便点

6、创建automake需要的一些文件

touch AUTHORS NEWS README INSTALL ChangeLog

7、心动从现在开始

aclocal
autoconf
intltoolize
autoheader
automake --add-missing --gnu

8、正事要紧

给自己的程序添加gettext支持,关于gettext的详细介绍可参考其它文章,一般就是以下套路
#include 
#include

#define _(string) gettext(string)
#define N_(string) string

void
i18n_init(void)
{
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
textdomain(GETTEXT_PACKAGE);
}

通常程序在入口处就调用i18n_init(),在显示常量字符串的时候一般如fprintf(stdout, _("Hello World\n"));

9、创建po文件

创 建并进入/po目录,创建POTFILES.in,内容为你需要提取源码中有需要翻译的字符串的源文件列表,每行一个文件,然后执行intltool- update --pot产生pot文件,如果将来你在维护代码中代码有变化或者在POTFILES.in中新增了源文件,可用intltool-update --maintain更新。

有了pot文件,现在需要产生各种语言的po文件,如msginit --locale=zh_CN产生中文po文件,如将来源文件有变化可以intltool-update zh_CN更新zh_CN.po,接下来翻译的工作就是你自己来做了。

要生成特定语言的mo文件,需要维护configure.ac中的ALL_LINGUAS,以空格分隔就可以了

10、测试

./configure --prefix=/usr
make
sudo make install
LANG="zh_CN.UTF-8" xxx
阅读(1695) | 评论(0) | 转发(0) |
0

上一篇:libxml2尝试

下一篇:程序库的autotools脚本

给主人留下些什么吧!~~