溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何使用autoconf生成Makefile并編譯工程

發(fā)布時(shí)間:2021-06-24 14:02:36 來(lái)源:億速云 閱讀:131 作者:小新 欄目:服務(wù)器

小編給大家分享一下如何使用autoconf生成Makefile并編譯工程,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

步驟

首先安裝autoconf

sudo apt-get install autoconf

新建一個(gè)項(xiàng)目文件夾(例如:joy)

mkdir joy

cd joy

在里面新建兩個(gè)文件夾 lib 和 src ,用于放工程的庫(kù)文件和源文件。

mkdir lib

mkdir src

如下圖所示:

如何使用autoconf生成Makefile并編譯工程

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

cd lib

gedit haha.h

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

進(jìn)入src文件夾,新建一個(gè)C文件,如:haha.c,實(shí)現(xiàn)頭文件的函數(shù);新建一個(gè)C文件,如:main_code.c,編寫(xiě)主函數(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)寫(xiě)好了

cd ..

運(yùn)行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里填源文件路徑下的任意一個(gè)文件名,autoconf通過(guò)檢測(cè)這個(gè)文件是否存在,判斷這個(gè)路徑是否正確,一般不用管
AC_CONFIG_HEADERS不用管
插入下面這句,automake階段需要,否則會(huì)報(bào)錯(cuò)
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í)行選項(xiàng),用空格隔開(kāi);
foreign指的是只檢測(cè)必須的文件;
subdir-objects指的是編譯生成的.o文件可以放在子路徑(跟源文件放一起),沒(méi)有這個(gè)選項(xiàng)的話(huà),所有.o文件都會(huì)放在工程根目錄下;
bin_PROGRAMS 后面的名字是 生成的可執(zhí)行二進(jìn)制文件名
可以有多個(gè) bin_PROGRAMS ,但每個(gè) bin_PROGRAMS 都需要有相對(duì)應(yīng)的 xxx_SOURCES ;
xxx_SOURCES 是 可執(zhí)行文件xxx的依賴(lài)項(xiàng),包括頭文件,源文件等

用aclocal生成aclocal.m4文件

aclocal

用autoconf生成configure文件

autoconf

用autoheader生成config.h.in

autoheader

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

automake --add-missing

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

如何使用autoconf生成Makefile并編譯工程

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

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

首先生成Makefile

./configure

然后make

make

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

如何使用autoconf生成Makefile并編譯工程

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

如何使用autoconf生成Makefile并編譯工程

結(jié)果是正確的。

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

如何使用autoconf生成Makefile并編譯工程

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

以上是“如何使用autoconf生成Makefile并編譯工程”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI