需要使用到的命令
autoscan命令
aclocal命令
autoconf命令
automake -a命令
使用autotools构建工程的逻辑如下所示:
安装autoconf、automake
安装成功之后进入工程目录,执行autoscan,出现两个文件autoscan.log和configure.scan
手动修改configure.scan为configure.ac或者configure.in
手动修改configure.ac的内容
AC_CONFIG_FILES([.vim/bundle/clang_complete/Makefile
.vim/bundle/sparkup/Makefile
.vim/bundle/supertab/Makefile])
这里把括号内的多余的makefile去掉
加入AM_INIT_AUTOMAKE字段,
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
这里修改为所需的包名,版本号,邮箱地址
AC_INIT([mpi_test], [1.0], [BUG-REPORT-ADDRESS@qq.com])
完整的configure.ac的内容如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([mpi_test], [1.0], [BUG-REPORT-ADDRESS@qq.com])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([H_U_VW_Vp.cpp])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX([mpicxx])
AC_PROG_CC(mpicc)
AC_PROG_INSTALL
AC_PROG_LN_S
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([limits.h stddef.h stdint.h stdlib.h string.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T
# Checks for library functions.
AC_CHECK_FUNCS([memset pow])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
手动创建Makefile.am Makefile.am的内容如下:
bin_PROGRAMS=mpiwaste
mpiwaste_SOURCES=DataTran.cpp h_Coord.cpp Inside.cpp Partition.cpp TDFWI.cpp testTDFWI.cpp H_Border.cpp H_U_VW_Vp.cpp RWsgy.cpp testmain.cpp
mpiwaste_CXXFLAGS=-std=c++11
执行automake --add-missing之前先执行autoheader然后会出现config.h.in文件
手动创建这几个缺失的文件
INSTALL | 安装描述。你可以从其他基于automake的应用中拷贝一个标准的INSTALL文件,然后添加一些针对你的应用的信息。 |
README | 用户应该知道的一些关于本应用的信息。最好在文件的开始处简单描述一些这个应用的目的 |
AUTHORS | 作者列表。 |
NEWS | 关于本应用的最新的新闻 |
ChangLog | 本应用的修订历史 |
再次执行automake -a,成功后会出现configure可执行脚本,执行configure,
成功后会出现Makefile,然后执行make或者make install即可。
这个例子中工程使用的源文件和头文件在一个目录下,如果目录结构复杂一些还要做修改,
比如下面功臣的目录结构:
├── build
├── createmake.sh
├── data
│ ├── InitVp-3D.sgy
│ ├── newdata
│ │ ├── InitVp-3D.sgy
│ │ └── TrueVp-3D.sgy
│ └── TrueVp-3D.sgy
├── include
│ ├── common.h
│ ├── const_value.h
│ ├── DataTran.h
│ ├── Partition.h
│ ├── RWsgy.h
│ └── testHFWI3D.h
├── main.cpp
├── Makefile.back
├── mpd.hosts
├── result
│ ├── CalGrad
│ ├── CalGrad_comu_
│ ├── CalStepLength
│ ├── CalStepLength_comu_
│ ├── CalTrueWF
│ ├── CalTrueWF_comu_
│ ├── PreProcess_comu_
│ ├── read_time
│ └── Total_time
├── run.sh
├── series.sh
├── src
│ ├── DataTran.cpp
│ ├── H_Border.cpp
│ ├── h_Coord.cpp
│ ├── Inside.cpp
│ ├── Makefile.am
│ ├── Makefile.back
│ ├── Makefile.in
│ ├── Partition.cpp
│ ├── RWsgy.cpp
│ └── testHFWI3D.cpp
└── test.sh
src中保存的是源文件.cpp,result中保存的运行结果,include包含头文件,data中是初始数据。
configure文件做如下修改;
在src中也应该产生一个Makefile
AC_OUTPUT([Makefile
src/Makefile])
用到了fftw库,
AC_CHECK_LIB([fftw3], [main])
bin_PROGRAMS=3D_FDTD
3D_FDTD_SOURCES=main.cpp
3D_FDTD_LDFLAGS=-lfftw3
TOPPATH=$(shell /bin/pwd)
CURRENTPATH=$(shell /bin/pwd)
INCLUDES=-I$(TOPPATH)/include
export TOPPATH
export INCLUDES
SUBDIRS=src
LDADD=$(TOPPATH)/src/libutil.a
src目录下的Makefile.am
noinst_LIBRARIES=libutil.a
libutil_a_SOURCES=DataTran.cpp H_Border.cpp h_Coord.cpp Inside.cpp Partition.cpp RWsgy.cpp testHFWI3D.cpp
#libutil_a_SOURCES=$(UTILSOURCES)