天天看點

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的使用

由于windows和linux環境下編譯器不同,對源代碼做了簡單的修改,如:宏定義HUGE_VAL要想在linux下使用,需要包含math.h檔案。

(2)Autotools的使用

1.autoscan

Linux下autotools的使用

可以了解成掃描目前目錄下的所有檔案,然後生成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。

Linux下autotools的使用

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的使用

到此,便可以使用make建構我們的項目,生成可執行檔案。在make前,再看一下此時項目包含的檔案。

Linux下autotools的使用

(5)make

Linux下autotools的使用
./calulator
           
Linux下autotools的使用

Linux系列

  • 線程系統調用阻塞是否導緻程序阻塞的問題
  • shell執行linux指令
  • Ubuntu檢視線程
  • Linux打開目前路徑圖形化視窗
  • valgrind小例
  • Linux檔案鎖flock
  • Windows遠端桌面連接配接ubuntu
  • Linux更新Header
  • Linux下動态庫so查找與函數清單
  • 查找項目中包含某關鍵字的檔案
  • Linux清屏指令
  • Ubuntu unity7 stop/killed
  • Linux複制遠端檔案或目錄
  • Ubuntu 使用telnet

繼續閱讀