C語(yǔ)言編譯工具學(xué)習(xí)總結(jié)

? ? 在研發(fā)的過(guò)程中我們常常需要安裝一些程序,其中一種重要的按照方式便是從源碼安裝。像Redis,mysql,php, nginx這些開(kāi)源的程序都可以從源碼。在我們下載到源碼之后,在README文檔中常常告訴我們執(zhí)行以下命令即可安裝:

./configure

make 或者make install

一直很好奇這是怎么樣的一個(gè)過(guò)程。一番研究之后終于知道了些眉目。在這里總結(jié)一下。

? ? 首先,我們看看這個(gè)configure 是什么,vim打開(kāi)他,這是個(gè)shell腳本。他的作用是用來(lái)生成Makefile文件的。

? ? 然后,我們看看make這個(gè)命令是干什么的,用man make 查看幫助,發(fā)現(xiàn)它是gnu回來(lái)維護(hù)一組程序的工具。直白的講,就是用來(lái)根據(jù)源碼生成可執(zhí)行文件的工具。很好奇,這個(gè)工具咋就知道按照什么樣的步驟將我們的源碼編譯成可執(zhí)行文件呢?其實(shí)是根據(jù)./configure 生成的Makefile 來(lái)生成的。

? ? 到這兒,我們可能已經(jīng)明白了個(gè)大概。但是這次好奇心再次拷問(wèn)我:./configure 是這么生成Makefilede 呢。于是我打開(kāi)./configure 文件,沒(méi)讀幾行,發(fā)現(xiàn)這簡(jiǎn)直是個(gè)天書(shū)。很想知道作者是怎么寫(xiě)成的。

? ? 經(jīng)過(guò)一番google+baidu,一個(gè)主要的脈絡(luò)出來(lái)了:./configure 是可用手工編寫(xiě),但對(duì)于大型項(xiàng)目,各種依賴相當(dāng)復(fù)雜,加上不同平臺(tái)上的posix接口差異,人工編寫(xiě)的難度極大。于是有人就開(kāi)發(fā)了一系列的工具來(lái)生成這個(gè)文件。

? ? 了解到這個(gè)背景之后,我們可以想象,如果是我們自己編寫(xiě)這樣的一套工具會(huì)怎么做呢,首先我們要知道這些源碼都是什么,有一些什么樣的兼容性需要處理。因此需要掃描代碼,于是第一個(gè)神器autoscan出現(xiàn)了。man autoscan,生成一個(gè)configure.scan 文件。目前離我們的./configure 還很遠(yuǎn),在網(wǎng)上一番查詢之后,aclocal,automake,autoconf 一系列神器相繼出現(xiàn)。下面我們就來(lái)看看這些神奇是如何制造出configure文件的。

? ? 1.將configure.scan 重命名為configure.ac,修改其中的一寫(xiě)配置,添加AM_INIT_AUTOMAKE() 宏,作為aclocal的輸入生成aclocal.m4 文件。m4文件的內(nèi)容就是一系列的宏。

? ? 2.執(zhí)行autoconf,? autoheader 把a(bǔ)clocal.m4 轉(zhuǎn)換成config.h config.h.in

? ? 3.編寫(xiě)Makefile.ac 配置可執(zhí)行文件名稱,代碼等,通過(guò)automake -a 命令,生成configure。

到此大功告成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容