1. 程式人生 > >一個簡單的執行程式的GNU automake自動生成Makefile的方法及案例

一個簡單的執行程式的GNU automake自動生成Makefile的方法及案例


1、autoscan
2、修改生成的configure.scan為configure.in
3、aclocal
4、autoheader
5、autoconf
6、建立Makefile.am並進行具體內容的寫入
7、automake
8、automake
9、./configure生成Makefile
10、make得到可執行程式

光空說太抽象了,那麼來一個簡單的例子吧,
0、建立一個printf("Hello world!\n")的小程式,建立目錄hello後建立hello.c,
[email protected]:~/hello$ ls
hello.c

那麼下一步即可開始automake的工作了,
1、使用autoscan生成configure.scan
[email protected]
:~/hello$ autoscan
[email protected]:~/hello$ ls
autoscan.log  configure.scan  hello.c
[email protected]:~/hello$ aclocal
aclocal: `configure.ac' or `configure.in' is required
2、在上一步中直接執行aclocal時出現以上的提示,那麼就要將生成的configure.scan修改為configure.ac或configure.in再進行aclocal的執行;
[email protected]
:~/hello$ mv configure.scan configure.in
[email protected]:~/hello$ ls
autoscan.log  configure.in  hello.c
3、執行aclocal
[email protected]:~/hello$ aclocal
[email protected]:~/hello$ ls
autom4te.cache  autoscan.log  configure.in  hello.c
4、執行autoheader
[email protected]:~/hello$ ls
autom4te.cache  autoscan.log  config.h.in  configure.in  hello.c
5、執行autoconf
[email protected]
:~/hello$ autoconf
[email protected]:~/hello$ ls
autom4te.cache  autoscan.log  config.h.in  configure  configure.in  hello.c
6、建立Makefile.am
[email protected]:~/hello$ vim Makefile.am
[email protected]:~/hello$ cat Makefile.am
bin_PROGRAMS=hello
hello_SOURCES=hello.c

關於Makefile.am中的具體內容的意思是說生成的可執行檔案的名稱為hello,對應的原始碼為hello.c。
7、執行automake
[email protected]:~/hello$ automake
configure.in: no proper invocation of AM_INIT_AUTOMAKE was found.
configure.in: You should verify that configure.in invokes AM_INIT_AUTOMAKE,
configure.in: that aclocal.m4 is present in the top-level directory,
configure.in: and that aclocal.m4 was recently regenerated (using aclocal).
automake: no `Makefile.am' found for any configure output
automake: Did you forget AC_CONFIG_FILES([Makefile]) in configure.in?
這時出錯了,是說configure.in檔案中的AM_INIT_AUTOMAKE沒有找到,只有修改configure.in檔案後再從第三步進行重新執行,configure.in中的AC_INIT行下新增AM_INIT_AUTOMAKE(hello,1.0),格式為AM_INIT_AUTOMAKE(package,version),再修改AC_OUTPUT為AC_OUTPUT(Makefile);

修改完configure.in檔案後,再次執行2~7;

8、執行automake
[email protected]:~/hello$ automake
configure.in:6: required file `./install-sh' not found
configure.in:6:   `automake --add-missing' can install `install-sh'
configure.in:6: required file `./missing' not found
configure.in:6:   `automake --add-missing' can install `missing'
Makefile.am: required file `./INSTALL' not found
Makefile.am:   `automake --add-missing' can install `INSTALL'
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: required file `./COPYING' not found
Makefile.am:   `automake --add-missing' can install `COPYING'
Makefile.am: required file `./depcomp' not found
Makefile.am:   `automake --add-missing' can install `depcomp'

按照提示建立缺少的檔案,
[email protected]:~/hello$ touch NEWS README AUTHORS ChangeLog
再執行: [email protected]:~/hello$ automake --add-missing
沒有出錯的情況下再次執行automake;
[email protected]:~/hello$ ls
aclocal.m4      ChangeLog     configure.in  INSTALL      missing
AUTHORS         config.h.in   COPYING       install-sh   NEWS
autom4te.cache  config.h.in~  depcomp       Makefile.am  README
autoscan.log    configure     hello.c       Makefile.in
此時已經生成了生成Makefile檔案的cinfigure指令碼;
9、./configure生成Makefile
[email protected]:~/hello$ ls Makefile
Makefile
10、make得到可執行程式
[email protected]:~/hello$ make
make  all-am
make[1]: 正在進入目錄 `/home/ufo/hello'
gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c
mv -f .deps/hello.Tpo .deps/hello.Po
gcc  -g -O2   -o hello hello.o  
make[1]:正在離開目錄 `/home/ufo/hello'
[email protected]:~/hello$ ls
aclocal.m4      config.h       configure     hello.c     Makefile.am  stamp-h1
AUTHORS         config.h.in    configure.in  hello.o     Makefile.in
autom4te.cache  config.h.in~   COPYING       INSTALL     missing
autoscan.log    config.log     depcomp       install-sh  NEWS
ChangeLog       config.status  hello         Makefile    README
[email protected]:~/hello$ ./hello
Hello World!

這就是牛X的automake的例子;關於其中的細節日後有空再表了 ;-)

相關推薦

一個簡單執行程式GNU automake自動生成Makefile方法案例

1、autoscan 2、修改生成的configure.scan為configure.in 3、aclocal 4、autoheader 5、autoconf 6、建立Makefile.am並進行具體內容的寫入 7、automake 8、automake 9、./configure生成Makefile

一個簡單執行程序的GNU automake自動生成Makefile方法案例

rect -o 創建 otool 其中 ner markdown ted head 一個簡單的執行程序的GNU automake自動生成Makefile的方法及案例 在GNU的世界裏,存在Automake這樣的工具進行自動生成Makefile文件,automake是由Per

automake自動生成makefile檔案

 Linux下程式設計時,為了方便編譯,往往使用Makefile檔案自動完成編譯,但是Makefile檔案本身的書寫十分複雜,規則很多。好在Linux為我們提供了自動生成功能完善的Makefile檔案的工具autoconf/automake。本文講述如何使用它們生成Make

Swing 實現一個簡單窗體程式,並打成可執行jar包

1. 前言 在做App自動化測試時,需要經常獲取裝置資訊,Apk的包名,啟動activity等,每次都用命令列獲取很是麻煩,於是想到做一個窗體程式,只需要點幾個按鈕,就可以獲得所需資訊。最終介面如下: 2.佈局思路 這裡不對窗體具體功能做介紹,說一

網路程式設計與多執行緒的應用--基於socket udp編寫一個簡單聊天程式

void CChatDlg::OnBnClickedButtonSend() {// TODO: Add your control notification handler code here//獲取對方IPCIPAddressCtrl* pIPAddress = ((CIPAddressCtrl*)GetD

自己在之前做兩個專案中遇到多執行緒併發訪問如何解決的一個簡單demo程式

package com.geloin.main; public class TestMoreThread { public static void main(String[] args) { final test t0=new test(); final te

AutoConf自動生成Makefile(基於helloworld簡單例子)

programs tom change col -a 二進制 自己 int 生成 新建一個簡單的helloworld工程文件夾,目錄結構如下 hello.h代碼: #include<stdio.h> void fprint() { printf("h

基於python使用qqbot接入qq做一個簡單的文字消息自動回復

備註 命令 ESS 消息響應 int 二維 參考 成功 nonetype qqbot是一個免費開源的基於smartqq的python插件,如果默認安裝有pip,則可以直接在命令行下執行:pip install qqbot安裝qqbot,安裝成功後可以在命令行輸入qqbot

一個簡單程式談import和from...import的區別

今天在自己寫程式碼的過程中,設計到隨機種子數量(引數),因為一個檔案中可能用到這個引數不止一次甚至是不止一個檔案會用到這個引數。對於訓練一個數據集來說,如果當你的效能跑的差不多的話,肯定會改這個引數,那如果你在函式中給這個引數直接賦了值,後期改的時候牽動會很大,所以這個時候就要想著在另一個檔案中單獨定義這個引

windows程式崩潰時自動生成dump檔案方法

  /****************第一步新增createdump.h********************************* 新增一個頭檔案:createdump.h #pragma once #include <windows.h> #inclu

一個簡單程式,記錄虛擬碼的使用

計算工資 1 Display "Enter working time: " 2 3 Input workTime 4 5 Display "Enter salary: " 6 7 Input salary 8 9 Display "Your total salary are ", salar

一個簡單的shell指令碼:一鍵部署tomcat釋出簡單程式指令碼

測試環境中一鍵部署的一個小指令碼,這裡記錄下,方便想聯絡的人進行參考 環境介紹: 作業系統cos7.4 jdk版本:1.8 中介軟體服務版本:tomcat7.0.75 ——————————————以下是指令碼內容—————————————————————————

【MATLAB】一個簡單程式實現細胞計數

##實現帶UI介面的程式,對細胞計數 首先在建立一個圖形使用者介面,副檔名為.fIg的檔案,在MATlAB命令視窗啟動GUIDE,進行佈局,大致佈局為自己想要的介面,下圖是我自己做的介面(圖一)。可以選中屬性進行編輯  圖一圖二右鍵按鈕進入編輯器,即按鈕1的回撥函式,在函

網易公開課《Linux核心分析》學習心得-Linux核心如何裝載和啟動一個執行程式

實驗 設定斷點sys_execeve,並繼續 程式碼執行到了SyS_execve。在QEMU中執行exec,可以看到只能出現兩句,沒有完全執行完畢。 設定斷點load_elf_binary和start_thread,並執行,可以看到程式碼停在了

[一個簡單程式交易框架] 1 基本構思(待完善)

One Trader 一個簡單的策略交易框架 1. 架構 1.1. 層次劃分: 1.2. 模組劃分: 1.2.1. 市場資料 1.2.1.1. Tick與K線資料定義: 1.2.1.2. 介面設計概述

初學《Linux核心如何裝載和啟動一個執行程式

孫業毅 原創作品 轉載請註明出處 第七講 可執行程式的裝載 @2015.04 一、理論知識 Linux中,可以從c原始碼生產一個可執行程式,這其中要經過預處理、編譯和連結的過程。可以參考以下圖來理解這個過程: 其中,目標檔案中至少有編譯後的機器指令程式碼

解放程式設計師,自動生成資料庫表結構文件

程式設計師一般比較討厭寫文件,維護文件。程式出了bug,資料庫需要調整,很多時候我們都是直接開啟資料庫新增/修改/刪除欄位,久而久之資料庫文件沒人維護,已經失去了參考意義。但是資料庫表結構文件又是如此重要,如何是好?今天用springboot寫了一個工具,自動來生成資料庫結構

【探索wireshark】 使用autoconf, automake自動生成Makefile

     無論是在Linux還是在Unix環境中,make都是一個非常重要的編譯命令。不管是自己進行專案開發還是安裝應用軟體,我們都經常要用到make或 make install。利用make工具,我們可以將大型的開發專案分解成為多個更易於管理的模組,對於一個包括幾百個

使用autotools自動生成Makefile並在此之上使用dh-make生成可釋出的deb程式包(詳解)

一、前言        本文將介紹如何使用autotools生成一個Makefile檔案,並在此基礎上使用dh-make和debuild生成一個可釋出的deb程式包,這也是我們在Linux下開發應用程式以及想要釋出應用程式需要做的。        無論是在Linux還是在U

LinuxC程式設計基礎—一個簡單程式

        1.一個簡單的C程式C語言就是一種在計算機上實現程式的描述語言。它在描述一個完整的程式時,有固定的結構要求和具體的描述方法,類似於我們的對話丶寫文章要有主謂賓基本語句部分一樣,缺少一部分就不成一句話了。        我們先來一個簡單的程式例子,使讀者對C語言