所必须的软件:autoconf/automake/m4/perl/libtool(其中libtool非必须)。
下面是项目的文件目录关系,主函数main在MPIFileClassify.c中:
终端:
cd MPIFileClassify //项目所在目录
autoscan //生成configure.scan文件
mv configure.scan configure.in //重命名configure.scan文件
vi configure.in //编辑configure.in,修改如下:
说明:AC_INIT(FILE):用来检查源代码所在的路径
AM_INIT_AUTOMAKE(PACKAGE,VERSION):这个宏是必须的,它描述将要生成的软件包的名字及其版本号。当使用make dist命令时,它会生成一个类似PACKAGE-VERSION.tar.gz的软件发行包。
AC_CONFIG_SRCDIR(FILE): 测试源文件,只写其中一个或按其默认
AC_CHECK_PROG(AC_PROG_CC):默认是gcc编译器,由于后面程序是要用mpicc编译器,在这里定义宏检查
AC_OUTPUT(Makefile):要输出Makefile,大小写似乎对后面有影响
回到终端:
aclocal //产生aclocal.m4
autoconf //生成configure文件。在执行./configure命令生成Makefile前,还需要一个文件Makefile.am,手动创建并编辑
vi Makefile.am //修改内容如下:
AUTOMAKE_OPTIONS:在执行automake 时,它会检查目录下是否存在标准GNU 软件包中应具备的各种文件,例如AUTHORS 、ChangeLog 、NEWS 等文件。将其设置成foreign 时,automake 会改用一般软件包的标准来检查。
CC=MPICC:指定使用mpicc编译器
CFLAGS=-L/usr/include/postgresql -lpq:编译使用到的postgresql的链接库(C语言连接postgresql的库,如果缺少)
bin_PROGRAMS:产生的可执行文件的文件名。如果要产生多个可执行文件,那么在各个名字间用空格隔开。
MPIFileClassify_SOURCES:指定产生“MPIFileClassify” 时所需要的源代码。如果用到了多个源文件,用空格符号将它们隔开。
回到终端:
automake --add-missing //如果出现configure.in:LINENUMBER:required file '***.in'文件 not found,运行命令autoheader再automake即可,这是因为AC_CONFIG_HEADERS需要测试文件,在这里我直接把configure.in里的AC_CONFIG_HEADERS宏注释了
./configure //生成Makefile
make //编译
如果有修改configure.in和Makefile.am文件,建议从aclocal命令重新执行一遍。
安装PostgreSQL的C语言连接库:yum install postgresql-devel.xxx
在.c文件中:#include <libpq-fe.h>
参考:http://blog.chinaunix.net/space.php?uid=20799298&do=blog&id=99619