0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux下automake應(yīng)用

wang123a ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-08-24 15:10 ? 次閱讀

Linux下automake應(yīng)用

linux 環(huán)境下,當(dāng)項(xiàng)目工程很大的時(shí)候,編譯的過程很復(fù)雜,所以需要使用 make 工具,自動(dòng)進(jìn)行編譯安裝,但是手寫 makefile 文件比較復(fù)雜,所幸在 GNU 的計(jì)劃中,設(shè)計(jì)出了一種叫做 Autoconf/Automake 的工具,用來自動(dòng)生成 makefile 文件,為編譯和安裝程序提供了一個(gè)方便快捷的入口。

Automake 是一種幫助『自動(dòng)』產(chǎn)生 Makefile 文件的軟件,并且讓開發(fā)出來的的軟件可以象 Apache,MySQL 和常見的 GNU 軟件一樣,程序設(shè)計(jì)者只需要寫一些預(yù)先定義好的宏 (macro),提交給Automake處理后會(huì)產(chǎn)生一個(gè)可以供 Autoconf 使用的 Makefile.in文件。再配合利用 Autoconf產(chǎn)生的自動(dòng)配置設(shè)置文件 configure 即可產(chǎn)生一份符合 GNU Makefile 慣例的 Makeifle 了。

Makefile 基本結(jié)構(gòu)雖然很簡單,但是妥善運(yùn)用這些規(guī)則就可以變換出許多不同的花樣。卻也因?yàn)檫@樣,許多剛剛開始學(xué)習(xí)寫Makefile 時(shí)會(huì)覺得沒有規(guī)范可以遵循,每個(gè)人寫出來的Makefile都不大一樣,不知道從哪里下手,而且常常會(huì)受到自己的開發(fā)環(huán)境的限制,只要環(huán)境參數(shù)不同或者路徑更改,可能 Makefile 就得跟著修改修改。雖然有 GNU Makefile Conventions (GNU Makefile慣例例)訂出一些使用 GNU 程式設(shè)計(jì)時(shí)撰寫 Makefile 的一些標(biāo)準(zhǔn)和規(guī)范,但是內(nèi)容很長而且很復(fù)雜,并且經(jīng)常作一些調(diào)整,為了減輕程序開發(fā)人員維護(hù)Makefile 的負(fù)擔(dān),因此出現(xiàn)了Automake。

無論是在 Linux 還是在 Unix 環(huán)境中, make 都是一個(gè)非常重要的編譯命令。不管是自己進(jìn)行項(xiàng)目開發(fā)還是安裝應(yīng)用軟件,我們都經(jīng)常要用到 make 或 make install。利用 make 工具,我們可以將大型的開發(fā)項(xiàng)目分解成為多個(gè)更易于管理的模塊,對(duì)于一個(gè)包括幾百個(gè)源文件的應(yīng)用程序,使用 make 和 makefile 工具就可以輕而易舉的理順各個(gè)源文件之間紛繁復(fù)雜的相互關(guān)系。

?2.Ubuntu下make和automake工具安裝

[wbyq@wbyq shared]$ sudo apt-get install make 
[wbyq@wbyq shared]$ sudo apt-get install automake

??注意:automake工具配置生成Makefile文件時(shí)會(huì)生成連接文件,所以不能在共享路徑去配置生成Makefile文件。

?3.automake構(gòu)建生成Makefile示例

源碼和目錄結(jié)構(gòu):

在這里插入圖片描述

??automake構(gòu)建生成Makefile流程:

pYYBAGMFztSAXetpAATh5gXjWDI079.png#pic_center

?3.1 執(zhí)行autoscan命令

??執(zhí)行autoscan生成configure.scan,將configure.scan重名名為configure.ac,編輯configure.ac文件。

[wbyq@wbyq shared]$ ls
autoscan.log  configure.scan  include  lib  main.c  src
[wbyq@wbyq work]$ mv configure.scan configure.ac
[wbyq@wbyq work]$ gedit configure.ac  #修改文件
poYBAGMFztSATCtQAAErywcddag715.png#pic_center

?3.2 執(zhí)行aclocal命令

??執(zhí)行aclocal生成configure.scan,生成aclocal.m4 文件。

[wbyq@wbyq shared]$ aclocal
ls[wbyq@wbyq shared]$ ls
aclocal.m4      autoscan.log  include  main.c
autom4te.cache  configure.ac  lib      src

?3.3 執(zhí)行autoconf生成configure?

[wbyq@wbyq shared]$ autoconf
[wbyq@wbyq shared]$ ls
aclocal.m4      autoscan.log  configure.ac  lib     src
autom4te.cache  configure     include       main.c

3.4 執(zhí)行autoheader生成config.h.in

[wbyq@wbyq shared]$ autoheader 
[wbyq@wbyq shared]$ ls
aclocal.m4      autoscan.log  configure     include  main.c
autom4te.cache  config.h.in   configure.ac  lib      src

?2.5 創(chuàng)建Makefile.am文件

??創(chuàng)建Makefile.am文件,編輯Makefile.am。

[wbyq@wbyq shared]$ touch Makefile.am

??Makefile.am文件內(nèi)容:

AUTOMAKE_OPTIONS=foreign #指定協(xié)議規(guī)范
bin_PROGRAMS=app  #生成的可執(zhí)行文件
#AUTOMAKE_OPTIONS = subdir-objects 
app_SOURCES=main.c $(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c
AM_CPPFLAGS=-Iinclude #指定頭文件路徑
#編譯動(dòng)態(tài)庫
lib_LTLIBRARIES=libmyfile.la #動(dòng)態(tài)庫名
libmyfile_la_SOURCES=$(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c #生成動(dòng)態(tài)庫依賴文件
libmyfile_la_CPPFLAGS=-I$(top_srcdir)/include #依賴頭文件路徑
#編譯靜態(tài)庫
lib_LIBRARIES=libmyfile.a
libmyfile_a_SOURCES=$(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c
#打包頭文件
include_HEADERS=$(top_srcdir)/include/*
#實(shí)例文件
data_DATA=$(top_srcdir)/main.c

??PROGRAMS:表示可執(zhí)行文件
??LIBRARIES:表示靜態(tài)庫文件
??LTLIBRARIES:表示動(dòng)態(tài)庫文件,前面的 LT 表示 libtool。
??HEADERS:頭文件。

2.6執(zhí)行automake --add-missing生成Makefile.in文件

注意:當(dāng)創(chuàng)建動(dòng)態(tài)庫時(shí),需要在執(zhí)行 automake --add-missing之前需要執(zhí)行l(wèi)ibtoolize -f -c

若沒有l(wèi)ibtool工具則在線安裝:sudo apt-get install libtool

[wbyq@wbyq shared]$ libtoolize -f -c
[wbyq@wbyq shared]$ automake --add-missing

?2.7 執(zhí)行configure生成Makefile

[wbyq@wbyq shared]$ ./configure --prefix=$PWD/_install --enable-shared --enable-static 

??--prefix=$PWD/_install ??----指定安裝路徑
??--enable-shared ??----編譯生成動(dòng)態(tài)庫
??--enable-static ??----編譯生成靜態(tài)庫

?2.8 編譯安裝make && make install

[wbyq@wbyq shared]$ make && make install

??編譯生成文件信息

pYYBAGMFztSAcG4yAADBX4Fkixs056.png#pic_center

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11329

    瀏覽量

    209969
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19194
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux開發(fā)_Linux進(jìn)程編程

    介紹Linux進(jìn)程概念、進(jìn)程信號(hào)捕獲、進(jìn)程管理相關(guān)的命令的使用等知識(shí)點(diǎn)。
    的頭像 發(fā)表于 09-17 15:38 ?1381次閱讀
    <b class='flag-5'>Linux</b>開發(fā)_<b class='flag-5'>Linux</b><b class='flag-5'>下</b>進(jìn)程編程

    Linux GCC的編譯

    一、Linux 多文件編譯 在上一篇 Linux 的 C 編程我們知道了 Linux 的編
    的頭像 發(fā)表于 09-11 15:18 ?2675次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>下</b>GCC的編譯

    如何學(xué)習(xí)linux的基礎(chǔ)知識(shí)

    C語言環(huán)境概述:Gcc使用方法:Gdb調(diào)試技術(shù),Autoconf Automake Makefile,代碼優(yōu)化,熟悉Linux系統(tǒng)的開發(fā)環(huán)境,熟悉Gcc編譯器,熟悉Makefile規(guī)則編寫Hello,World程序,使用ma
    發(fā)表于 08-03 14:28

    Linux的網(wǎng)絡(luò)HOOK實(shí)現(xiàn)

    最近瘋狂的研究Linux的種種功能,也頗有心得,這里講述一Linux的Net的Hook,使用net的Hook可以實(shí)現(xiàn)很多很多非常底層的功能
    發(fā)表于 05-14 10:27 ?5154次閱讀

    linuxvim使用詳解

    linuxvim使用科普教程,供大家學(xué)習(xí)使用。
    發(fā)表于 03-16 15:41 ?0次下載

    Linux基于Socket的網(wǎng)絡(luò)編程

    linux開發(fā)編程教程資料——Linux基于Socket的網(wǎng)絡(luò)編程,感興趣的小伙伴們可以看一看。
    發(fā)表于 08-23 16:23 ?0次下載

    Linux的網(wǎng)絡(luò)編程總結(jié)

    linux開發(fā)編程教程資料——Linux的網(wǎng)絡(luò)編程總結(jié),感興趣的小伙伴們可以看一看。
    發(fā)表于 08-23 16:23 ?0次下載

    LinuxSocket網(wǎng)絡(luò)編程

    linux開發(fā)編程教程資料——LinuxSocket網(wǎng)絡(luò)編程,感興趣的小伙伴們可以看一看。
    發(fā)表于 08-23 16:23 ?0次下載

    linux C編程

    linux C編程
    發(fā)表于 10-25 08:54 ?9次下載
    <b class='flag-5'>linux</b> <b class='flag-5'>下</b>C編程

    LinuxQt的安裝

    LinuxQt的安裝
    發(fā)表于 11-09 17:14 ?5次下載

    Linux系統(tǒng)軟硬鏈接原理

    Linux系統(tǒng)軟硬鏈接原理
    發(fā)表于 11-23 08:49 ?1次下載

    LINUX系統(tǒng)教程之如何在Linux系統(tǒng)進(jìn)行編程

    本文檔的主要內(nèi)容詳細(xì)介紹的是LINUX系統(tǒng)教程之如何在Linux系統(tǒng)進(jìn)行編程主要內(nèi)容包括了:程序開發(fā)過程 ,Linux編程環(huán)境和開發(fā)工具 ,Lin
    發(fā)表于 12-18 19:09 ?9次下載

    Linux使用autoconf和automake生成Makefile

    ?作為Linux的程序開發(fā)人員,一定都遇到過Makefile,用make命令來編譯自己寫的程序確實(shí)是很方便。一般情況,大家都是手工寫一個(gè)簡單Makefile,如果要想寫出一個(gè)符合
    發(fā)表于 04-02 14:41 ?275次閱讀

    linux添加路由的方法

    linux添加路由的方法:
    發(fā)表于 05-26 09:44 ?3743次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>下</b>添加路由的方法

    linuxnodemcu環(huán)境搭建

    構(gòu)建esp8266編譯鏈sudo apt-get install build-essential zip gdb git vim make unrar autoconf automake
    發(fā)表于 10-25 14:51 ?13次下載
    <b class='flag-5'>linux</b><b class='flag-5'>下</b>nodemcu環(huán)境搭建