亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

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

2024-09-01 13:56:39
字體:
來源:轉載
供稿:網友

前言

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

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

步驟

首先安裝autoconf

sudo apt-get install autoconf

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

mkdir joy

cd joy

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

mkdir lib

mkdir src

如下圖所示:

autoconf,Makefile,編譯工程

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

cd lib

gedit haha.h

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

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

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();}

回到joy文件夾下,我們的工程文件都已經寫好了

cd ..

運行autoscan生成configure.scan

autoscan

autoconf,Makefile,編譯工程

編輯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-objectsbin_PROGRAMS=test_prj test_prj_SOURCES= /  lib/haha.h /  src/haha.c /  src/main_code.c

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

用aclocal生成aclocal.m4文件

aclocal

用autoconf生成configure文件

autoconf

用autoheader生成config.h.in

autoheader

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

automake --add-missing

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

autoconf,Makefile,編譯工程

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

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

首先生成Makefile

./configure

然后make

make

現在我們可以看見,可執行文件 test_prj 已經被生成出來了

autoconf,Makefile,編譯工程

運行一下,結果如下:

autoconf,Makefile,編譯工程

結果是正確的。

進入src目錄下,我們發現多了兩個文件

autoconf,Makefile,編譯工程

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲xxxxx性| 久久久久久欧美| 欧美激情一级二级| 亚洲自拍偷拍一区| 色哟哟入口国产精品| 欧美日韩国产在线| 国产精品美乳在线观看| 欧美国产视频一区二区| 欧美男插女视频| 欧美猛少妇色xxxxx| 亚洲一区免费网站| 亚洲娇小xxxx欧美娇小| 欧美精品videos| 色综合久久天天综线观看| 亚洲精品久久久久久久久久久久久| 亚洲精品电影在线观看| 丰满岳妇乱一区二区三区| 国产91对白在线播放| 成人免费视频xnxx.com| 国产欧美日韩综合精品| 欧美激情综合色| 2019av中文字幕| 国产精品爽爽爽爽爽爽在线观看| 国产+人+亚洲| 日韩欧美福利视频| **欧美日韩vr在线| 国产成人精品久久| 久久精品国产成人| 成人一区二区电影| 97热精品视频官网| 国产精品日韩欧美综合| 日韩精品在线电影| 国产一区二区在线播放| 日韩国产高清污视频在线观看| 亚洲国产精品高清久久久| 久久精品国产一区二区电影| 国产97人人超碰caoprom| 国产成人综合精品在线| 亚洲第一av网站| 91精品国产综合久久久久久久久| 日韩精品视频免费专区在线播放| 国产成人福利网站| 亚洲美女福利视频网站| 日本不卡视频在线播放| 欧美激情一区二区三级高清视频| 日韩免费在线免费观看| 亚洲精品www久久久久久广东| 国产一区二区三区直播精品电影| 6080yy精品一区二区三区| 2019av中文字幕| 日韩成人免费视频| 久久久久成人精品| 热re99久久精品国产66热| 欧美黄色片免费观看| 亚洲一区二区三| 久久99热精品这里久久精品| 欧美精品电影在线| 久久精品国产成人精品| 日韩成人av一区| 欧美国产日韩精品| 国产精品高清在线| 久久天天躁狠狠躁夜夜av| 上原亚衣av一区二区三区| 久久精品精品电影网| 91精品国产综合久久香蕉的用户体验| 北条麻妃在线一区二区| 欧美国产日韩xxxxx| 午夜伦理精品一区| 久久躁日日躁aaaaxxxx| 91成人性视频| 久久网福利资源网站| 高清日韩电视剧大全免费播放在线观看| 亚洲欧美福利视频| 2020欧美日韩在线视频| 国产精品户外野外| 日韩最新免费不卡| 亚洲va欧美va国产综合剧情| 国产精品h片在线播放| 欧美精品18videosex性欧美| 97人人爽人人喊人人模波多| 欧美男插女视频| 成人在线免费观看视视频| 欧美福利视频在线| 国产日韩在线亚洲字幕中文| 日本sm极度另类视频| 九九九久久国产免费| 久久久久一本一区二区青青蜜月| 亚洲第一区在线观看| 亚洲欧美一区二区精品久久久| 精品日韩中文字幕| 欧美午夜激情视频| 欧洲成人性视频| 4k岛国日韩精品**专区| 亚洲最新中文字幕| 亚洲肉体裸体xxxx137| 日韩精品极品在线观看| 欧美大全免费观看电视剧大泉洋| 欧美日韩国产精品一区| 欧美性猛交xxxx乱大交极品| 亚洲国产美女久久久久| 亚洲最大福利视频| 国语自产偷拍精品视频偷| 久久久久久亚洲精品| 在线观看亚洲视频| 久久九九免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 久久亚洲精品一区二区| 亚洲热线99精品视频| 国产欧美精品久久久| 久久久精品一区二区| 正在播放欧美视频| 国产91精品在线播放| 91精品国产综合久久久久久久久| 国产精品成熟老女人| 国产成人精品最新| www亚洲欧美| 性欧美在线看片a免费观看| 欧美黑人一区二区三区| 成人精品久久久| 欧美三级欧美成人高清www| 久久精品色欧美aⅴ一区二区| 九九热在线精品视频| 欧美另类精品xxxx孕妇| 亚洲国产精品美女| 成人福利在线视频| 欧美专区在线播放| 亚洲精品美女在线观看播放| 久久91亚洲人成电影网站| 欧美性做爰毛片| 亚洲女同性videos| 成人亲热视频网站| 日本亚洲欧美成人| 久久成人精品视频| 色综合亚洲精品激情狠狠| 欧美日韩国内自拍| 欧美日韩在线另类| 国产激情综合五月久久| 亚洲成人亚洲激情| 中文字幕最新精品| 欧美日韩国产在线| 亚洲第一色中文字幕| 欧美国产精品人人做人人爱| 亚洲精品自产拍| 国产精品一区二区久久| 亚洲成人精品在线| 91精品国产高清久久久久久91| 一本色道久久88综合日韩精品| 国产精品激情自拍| 精品视频9999| 亚洲图片欧美午夜| 国产精品一区二区三区成人| 一区二区三区精品99久久| 欧美刺激性大交免费视频| 成人精品在线观看| 国产成人自拍视频在线观看| 欧美一区三区三区高中清蜜桃| 久久久久久久一区二区三区| 久久影视电视剧凤归四时歌| 亚洲国产成人精品久久久国产成人一区| 91国内免费在线视频| 欧美性受xxxx白人性爽| 亚洲黄色片网站| 精品国产乱码久久久久久虫虫漫画| 欧美日韩亚洲91|