linux清除configure文件_在Linux操作系统下自动生成Makefile的方法
在Linux操作系統下進行開發,編寫Makefile似乎是不可缺少的事情。但是對于一個比較大的工程,編寫一個符合規范的Makefile并非易事。而且由于Makefile的各種顯式,隱式規則,加之平時并不經常編寫Makefile,導致我們寫一個Makefile文件變得更加困難了。
幸好Linux社區有一群非常懶,又非常勤奮得程序員,他們開發了一個可以自動生成Makefile文件得工具,這就是autotools.該工具可以通過掃描源文件,自動生成一個Makefile文件。是不是很神奇!下面是生成Makefile的一個整體流程,我們后面慢慢介紹。
安裝autotools
有的系統可能并沒有autotools工具,需要手動安裝,以Ubuntu為例,可以通過如下命令進行安裝:
sudo apt install automake
完成安裝之后就可以使用autotools進行下面的流程了。
生成configure.ac文件
首先我們要準備一些源文件,如下圖是本文準備的源文件。本文以C++語言開發的程序為例,其中main.cpp是主程序所在文件,而async_network*和storage*分別是網絡通信模塊和本地存儲模塊,分別封裝了一個C++類來實現具體的功能。本文通過多個文件是為了增加項目的復雜性。源文件的具體內容本文不再贅述,因為這個與內容無關。
完成對源文件創建后,我們就可以通過autoscan命令對該目錄進行掃描,生成configure.scan文件。首先切換到該目錄,然后執行命令,具體如下:
autoscan
執行成功后可以看出多了兩個文件,一個是autoscan.log,這個是日志文件;另外一個是configure.scan文件,這個是掃描的結果文件。
這里configure.scan其實是一個模板文件,我們需要手動修改一下其內容,并將其改名為configure.ac。具體需要做:
1) AC_INIT里面的參數: AC_INIT(main,1.0, sunnyzhang@126.com);
2) 添加宏AM_INIT_AUTOMAKE;
3) 在AC_OUTPUT后添加輸出文件Makefile。
完成修改后的文件內容如下:
生成aclocal.m4文件
直接執行aclocal命令即可生成該文件:
aclocal
aclocal.m4是一個宏定義文件,該文件內容的生成依賴于configure.ac文件。aclocal會根據confgure.ac文件的內容,搜索本地的m4文件(通常在類似目錄下面/usr/share/aclocal-1.15/),然后生成一個在本目錄下面使用的aclocal.m4文件。
生成config.h.in文件
該文件的生成比較簡單,直接在命令行執行如下命令即可:
autoheader
這個文件是一個模板文件,后面會利用該文件生成config.h文件。該文件包含一些宏定義。
生成Makefile.in文件
生成Makefile.in文件之前需要首先手動的創建一個Makefile.am文件,該文件用于描述源文件與目標文件的關系。本文對應的Makefile.am文件如下所示:
可以看出該文件非常簡單,這比寫一個Makefile要簡單的多。
如果要生成多個目標文件,需要在這里寫多個源文件與目標文件的對應關系。這種情況是非常常見的,比如一些復雜的項目中通常會包含主程序,測試程序,動態庫等等。
生成configure文件
上述文件都生成后就可以生成configure文件了。該文件是用于生成Makefile的一個腳本。我們在很多開源項目中肯定都遇到過。在開源項目中通常都有一個生成好的configure文件,我們只需要執行該文件就可以生成Makefile。
生成configure文件的方法很簡單,我們執行如下命令即可:
autoconf
至此我們完成了生成Makefile的所有準備工作,然后我們在該目錄下面運行configure腳本,即可生成Makefile文件。
./configure
可以看出,在整個過程中我們只需要手動修改或者創建2個文件,而且修改的內容很少。最后我們就可以得到一個完整的Makefile文件。對于大型的軟件項目,這種方法無疑是非常有效的。
今天的內容就到這里,大家只需要按照步驟運行就可以生成Makefile文件。后續我們在對每個工具進行更加深入的介紹,這樣大家不僅能知其然,還能知其所以然。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux清除configure文件_在Linux操作系统下自动生成Makefile的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java图片压缩不失真_软件分享 |
- 下一篇: js设计一个带开关的时钟_数电题:三个按