日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤

發布時間:2023/12/10 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在Linux下,編譯和鏈接需要用Makefile,而寫好一個Makefile可不容易,寫出一個規范的Makefile更是麻煩。我們可以利用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

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文件就會出現在你的根目錄下。如果很不幸你的工程比較大,有同名文件的話,那就可能出現很嚴重的后果了,所以這句話建議加上。

總結

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

總結

以上是生活随笔為你收集整理的linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。