您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用autoconf生成Makefile并編譯工程,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
步驟
首先安裝autoconf
sudo apt-get install autoconf
新建一個項目文件夾(例如:joy)
mkdir joy
cd joy
在里面新建兩個文件夾 lib 和 src ,用于放工程的庫文件和源文件。
mkdir lib
mkdir src
如下圖所示:
進入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
編輯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的執行選項,用空格隔開;
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或者開源論壇了。
別人下載了我們的源碼包之后怎么編譯鏈接可執行文件呢?或者說我們怎么編譯鏈接我們的可執行文件呢?
以下是源碼安裝的一般步驟,也是我們編譯鏈接的步驟
首先生成Makefile
./configure
然后make
make
現在我們可以看見,可執行文件 test_prj 已經被生成出來了
運行一下,結果如下:
結果是正確的。
進入src目錄下,我們發現多了兩個文件
這就是AUTOMAKE_OPTIONS里subdir-objects的作用,少了這句話,這兩個.o文件就會出現在你的根目錄下。如果很不幸你的工程比較大,有同名文件的話,那就可能出現很嚴重的后果了,所以這句話建議加上。
以上是“如何使用autoconf生成Makefile并編譯工程”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。