Linux下autotools的使用

Linux下autotools的使用

由于某些原因(持续集成:travis-ci+github),需要给项目写个Makefile。虽然可以直接去写Makefile,但autotools似乎更快捷。
整个项目最初在windows下编写,make这些工作都由VS做了。但travis-ci给c++提供的环境是linux。不得不转移到linux下,重头到尾构建了一遍。

(1)源代码
将源代码统一放到calculator文件夹下,路径为:/home/adver/calculator
Linux下autotools的使用_第1张图片
由于windows和linux环境下编译器不同,对源代码做了简单的修改,如:宏定义HUGE_VAL要想在linux下使用,需要包含math.h文件。

(2)Autotools的使用
1.autoscan
这里写图片描述
可以理解成扫描当前目录下的所有文件,然后生成configure.scan,将该文件重命名为 configure.ac(mv configure.scan configure.ac),并将内容修改如下:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
#项目名,版本号,作者邮箱地址
AC_INIT([calculator], [1.0], [[email protected]])
#可以理解为包含main函数的源文件
AC_CONFIG_SRCDIR([calculator.cpp])
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL

# Checks for library functions.
AC_FUNC_STRTOD
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

2.aclocal
使用aclocal命令,扫描 configure.ac文件,会生成aclocal.m4文件。该命令主要处理本地(local)的宏定义。

3.autoconf
使用autoconf命令,将configure.ac文件展开,同时会使用aclocal.m4文件,生成configure脚本。

4.autoheader
使用autoheader命令,根据configure.ac生成autoconfig.h.in。
这里写图片描述

5.Make文件的创建
(1)首先,手动创建Makefile.am文件

touch Makefile.am

(2)根据项目具体内容,编辑该文件。
UTOMAKE_OPTIONS:automake的一个选项,默认为gnu。可以设置为foreign, gnu和gnits, foreign只检测必须的文件。
**bin_PROGRAMS:**执行文件名称。
calculator_SOURCES:执行文件所需的文件,注意若程序名为xxx,需要修改为xxx_SOURCES。

UTOMAKE_OPTIONS = foreign  
bin_PROGRAMS = calculator  
calculator_SOURCES = AddNode.cpp AddNode.h AssignNode.cpp AssignNode.h BinNode.cpp BinNode.h calculator.cpp DivideNode.cpp DivideNode.h FunctionTable.cpp FunctionTable.h FunNode.cpp FunNode.h Htable.cpp Htable.h IStack.cpp IStack.h List.cpp List.h MultNode.cpp MultNode.h Node.cpp Node.h NumNode.cpp NumNode.h Parser.cpp Parser.h Scanner.cpp Scanner.h Store.cpp Store.h StringBuffer.h SubNode.cpp SubNode.h SymbolTable.cpp SymbolTable.h UMinusNode.cpp UMinusNode.h VarNode.cpp VarNode.h

(3)automake 生成make.in文件
使用如下命令,可自动生成几个必要的辅助文件。多运行automake --add-missingmake.in几次,知道不再提示缺少任何文件。(这个过程可能会提示缺少如:NEWS等4个文件,使用touch NEWS新建即可)。
成功后,会生成Makefile.in文件。

automake --add-missing

(4)生成Makefile文件
接下来,使用**./configure**命令,生成最终的Makefile文件。
Linux下autotools的使用_第2张图片
到此,便可以使用make构建我们的项目,生成可执行文件。在make前,再看一下此时项目包含的文件。
Linux下autotools的使用_第3张图片

(5)make

make

Linux下autotools的使用_第4张图片

./calulator

Linux下autotools的使用_第5张图片

Linux系列

  • 线程系统调用阻塞是否导致进程阻塞的问题
  • shell执行linux命令
  • Ubuntu查看线程
  • Linux打开当前路径图形化窗口
  • valgrind小例
  • Linux文件锁flock
  • Windows远程桌面连接ubuntu
  • Linux升级Header
  • Linux下动态库so查找与函数列表
  • 查找项目中包含某关键字的文件
  • Linux清屏命令
  • Ubuntu unity7 stop/killed
  • Linux复制远程文件或目录
  • Ubuntu 使用telnet

你可能感兴趣的:(Linux)