最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用autoconf生成Makefile并編譯工程的步驟

 更新時間:2019年02月26日 09:07:25   作者:Joyce_Ng  
今天小編就為大家分享一篇關(guān)于使用autoconf生成Makefile并編譯工程的步驟,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

前言

在Linux下,編譯和鏈接需要用Makefile,而寫好一個Makefile可不容易,寫出一個規(guī)范的Makefile更是麻煩。我們可以利用autoconf來生成一個Makefile,尤其在大型工程里,能省去很多麻煩。

這里我會用一個工程來說明怎么做,有一些步驟不是必須的,但是如果你看不出來哪些步驟不是必須的,最好跟著一步步走,因為某些步驟省略了,代碼也需要做出相應修改(如修改路徑等)。

步驟

首先安裝autoconf

sudo apt-get install autoconf

新建一個項目文件夾(例如:joy)

mkdir joy

cd joy

在里面新建兩個文件夾 lib 和 src ,用于放工程的庫文件和源文件。

mkdir lib

mkdir src

如下圖所示:

進入lib文件夾,新建一個頭文件,如:haha.h,隨便聲明個函數(shù)吧。

cd lib

gedit haha.h

//haha.h
#include <stdio.h>
void printhaha();

進入src文件夾,新建一個C文件,如:haha.c,實現(xiàn)頭文件的函數(shù);新建一個C文件,如:main_code.c,編寫主函數(shù)。

cd ../src

gedit haha.c

//haha.c
#include "../lib/haha.h"
void printhaha()
{
  printf("haha\n");
}
//main_code.c
#include "../lib/haha.h"
void main()
{
  printhaha();
}

回到j(luò)oy文件夾下,我們的工程文件都已經(jīng)寫好了

cd ..

運行autoscan生成configure.scan

autoscan

編輯configure.scan

gedit configure.scan

編輯之前的文件是這樣的

#編輯之前的原始文件
#                        -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/haha.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT

前綴AC指的是 AutoConf
AC_PREREQ不用管
AC_INIT里面填【包名】【版本】【BUG提交地址 也就是你的郵箱】
AC_CONFIG_SRCDIR里填源文件路徑下的任意一個文件名,autoconf通過檢測這個文件是否存在,判斷這個路徑是否正確,一般不用管
AC_CONFIG_HEADERS不用管
插入下面這句,automake階段需要,否則會報錯
AM_INIT_AUTOMAKE
前綴AM指的是 AutoMake
最后的AC_OUTPUT,改為AC_OUTPUT(Makefile)
修改完之后的文件如下所示:

#修改后的文件
#                        -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT(hhh, 1.0, idontknow@666.com)
AC_CONFIG_SRCDIR([src/haha.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE  
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)

保存,并將configure.scan重命名為configure.ac

新建Makefile.am

gedit Makefile.am

輸入以下代碼

AUTOMAKE_OPTIONS= \
  foreign \
  subdir-objects
bin_PROGRAMS=test_prj 
test_prj_SOURCES= \
  lib/haha.h \
  src/haha.c \
  src/main_code.c

AUTOMAKE_OPTIONS后面是automake的執(zhí)行選項,用空格隔開;
foreign指的是只檢測必須的文件;
subdir-objects指的是編譯生成的.o文件可以放在子路徑(跟源文件放一起),沒有這個選項的話,所有.o文件都會放在工程根目錄下;
bin_PROGRAMS 后面的名字是 生成的可執(zhí)行二進制文件名
可以有多個 bin_PROGRAMS ,但每個 bin_PROGRAMS 都需要有相對應的 xxx_SOURCES ;
xxx_SOURCES 是 可執(zhí)行文件xxx的依賴項,包括頭文件,源文件等

用aclocal生成aclocal.m4文件

aclocal

用autoconf生成configure文件

autoconf

用autoheader生成config.h.in

autoheader

用automake生成Makefile.in,需要加上 –add-missing使其自動加上缺省文件

automake --add-missing

然后我們這個軟件就做好了,可以整個包拿去上傳github或者開源論壇了。

別人下載了我們的源碼包之后怎么編譯鏈接可執(zhí)行文件呢?或者說我們怎么編譯鏈接我們的可執(zhí)行文件呢?

以下是源碼安裝的一般步驟,也是我們編譯鏈接的步驟

首先生成Makefile

./configure

然后make

make

現(xiàn)在我們可以看見,可執(zhí)行文件 test_prj 已經(jīng)被生成出來了

運行一下,結(jié)果如下:

結(jié)果是正確的。

進入src目錄下,我們發(fā)現(xiàn)多了兩個文件


這就是AUTOMAKE_OPTIONS里subdir-objects的作用,少了這句話,這兩個.o文件就會出現(xiàn)在你的根目錄下。如果很不幸你的工程比較大,有同名文件的話,那就可能出現(xiàn)很嚴重的后果了,所以這句話建議加上。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • linux網(wǎng)絡(luò)參數(shù)配置方法詳解

    linux網(wǎng)絡(luò)參數(shù)配置方法詳解

    這篇文章主要介紹了linux網(wǎng)絡(luò)參數(shù)的配置方法,這樣可以讓你的服務(wù)器訪問網(wǎng)絡(luò),主要參數(shù):IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS
    2013-11-11
  • Linux配置IP地址的三種實現(xiàn)方式

    Linux配置IP地址的三種實現(xiàn)方式

    這篇文章主要介紹了Linux配置IP地址的三種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • CentOS查詢軟件包的安裝位置

    CentOS查詢軟件包的安裝位置

    這篇文章主要介紹了在CentOS中使用yum -ql <軟件包名>的方式查詢軟件包的安裝位置,有需要的朋友可以參考下
    2014-09-09
  • Linux中的who命令實例介紹

    Linux中的who命令實例介紹

    who命令是顯示目前登錄系統(tǒng)的用戶信息。下面這篇文章主要給大家介紹了關(guān)于Linux中who命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-12-12
  • 使用Apache ab工具對Apache服務(wù)器進行簡單的壓力測試

    使用Apache ab工具對Apache服務(wù)器進行簡單的壓力測試

    這篇文章主要介紹了使用Apache ab工具對Apache服務(wù)器進行簡單的壓力測試的方法,文中還對如何查看當前Apache的連接數(shù)的方法作了介紹,需要的朋友可以參考下
    2016-03-03
  • 基于Apache的支持.NET2.0的Web服務(wù)器搭建

    基于Apache的支持.NET2.0的Web服務(wù)器搭建

    在Windows XP下如果沒有IIS,那么Apache HTTP Server無疑是最好的替代品了。而它也能夠很好的支持ASP.NET1.1/2.0。下面就介紹一下如何搭建該環(huán)境。
    2009-08-08
  • Linux桌面的4種掃描工具

    Linux桌面的4種掃描工具

    今天小編就為大家分享一篇關(guān)于Linux桌面的4種掃描工具的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Linux中實現(xiàn)光盤開機自動掛載和配置本地yum源教程

    Linux中實現(xiàn)光盤開機自動掛載和配置本地yum源教程

    在Linux系統(tǒng)中,光盤自動掛載功能可以極大地方便用戶管理和訪問光盤數(shù)據(jù),本教程將逐步引導你完成光盤自動掛載的設(shè)置過程,確保每次插入光盤時,系統(tǒng)能夠自動識別并掛載光盤,從而簡化文件訪問流程,需要的朋友可以參考下
    2024-03-03
  • 詳解Linux time 命令的使用

    詳解Linux time 命令的使用

    這篇文章主要介紹了詳解Linux time 命令的使用,幫助大家更好的理解和學習linux,感興趣的朋友可以了解下
    2020-08-08
  • 解決SSH連接超時的2個配置方法

    解決SSH連接超時的2個配置方法

    用SSH客戶端連接linux服務(wù)器時,經(jīng)常會出現(xiàn)與服務(wù)器會話連接中斷現(xiàn)象,照成這個問題的原因便是SSH服務(wù)有自己獨特的會話連接機制。
    2014-04-04

最新評論

广宗县| 新津县| 胶州市| 平江县| 东方市| 广汉市| 临澧县| 同江市| 房山区| 乌审旗| 习水县| 双鸭山市| 周口市| 水城县| 曲阳县| 寻乌县| 康马县| 丹寨县| 高平市| 扬州市| 新田县| 普安县| 达拉特旗| 镶黄旗| 淮滨县| 蒲江县| 绥阳县| 辰溪县| 西青区| 广宁县| 新化县| 钟山县| 屏南县| 巨野县| 南京市| 门源| 大洼县| 阿克| 五原县| 定边县| 大名县|