利用Qmake創(chuàng)建makefile

最近工作當(dāng)中遇到小需求,simulink生成各個(gè)功能模塊的代碼,為了保證在遞交給底層所有.c和.h文件接口上沒有問題,因此在生成代碼過后先自己用C編譯器編譯一次。本來前同事是利用VS,創(chuàng)建工程,把源代碼加進(jìn)去生成的,但是我覺得太麻煩了,每個(gè)人想編譯的時(shí)候都要安裝巨大無比的VS。

實(shí)際上,只需要mingw的gcc命令即可完成工作。不過核心問題在于,一共有30多個(gè)功能模塊分別單獨(dú)生成代碼,源代碼分布在30多個(gè)文件夾下面,并且模塊之間有文件關(guān)聯(lián),因此需要寫makefile來完成關(guān)聯(lián)編譯。

由于不是計(jì)算機(jī)科班出身,對(duì)makefile的語法本身不是特別的熟悉。在網(wǎng)上找了一些模板后也存在這樣那樣的問題,實(shí)在不想去完整的看一遍makefile的語法,就另辟蹊徑利用QT的qmake來生成makefile。

構(gòu)建順序

總的來說,為了完成此項(xiàng)工作,過程如下圖所示:

Step 1:

打開QT,創(chuàng)建C Application工程,放在同源代碼的路徑下,接下來全程下一步就好了。這時(shí)候QT會(huì)創(chuàng)建pro文件到該文件夾下。

建立工程

Step 2:

右鍵點(diǎn)擊該工程頂層文件夾,選擇加入存在的路徑,然后定位到源代碼路徑,點(diǎn)擊start parsing,就可以掃描源代碼。OK之后可以看到pro文件中加入所有源代碼。

加入待編譯源代碼

Step 3:

打開pro文件,加入INCLUDEPATH +=,填上所有H文件所在路徑,格式和SOURCES+=一樣。(由于文件太多,我是用python寫了個(gè)小腳本,把路徑打印出來粘貼到上面的)

添加includepath

Step 4:

保存pro文件,運(yùn)行Qmake。在命令行輸入qmake Test.pro(我創(chuàng)建的工程名字為Test),可以看到該路徑下生成了好幾個(gè)文件。

Qmake生成的文件

經(jīng)過對(duì)三個(gè)makefile代碼的查看,發(fā)現(xiàn)Makefile去調(diào)用Makefile.Debug和Makefile.Release所以最后我直接把使用Makefile.Debug,把里面關(guān)于QT的代碼都刪除,保證只編譯我們需要去編譯的文件。(Makefile.Debug本身并不是makefile文件,我是復(fù)制里面的代碼到makefile文件夾下)

Step 5:

編寫bat文件,主要是創(chuàng)建debug文件夾(存放.o文件),編譯報(bào)錯(cuò)終止編譯,編譯結(jié)束運(yùn)行exe文件,代碼如下。

echo off
if not exist debug md debug
mingw32-make
if %errorlevel%  equ 0 (
    echo task編譯完畢
    del debug\*.o
    echo 刪除中間文件完畢
    start debug\task.exe 
) else (
    del debug\*.o
    echo 編譯錯(cuò)誤,請(qǐng)檢查源文件
)
pause

最后保留object_script.Test.Debug文件,刪除其余的即可。剩下的文件如下所示:


保留文件

因此大功告成,之后每次只需要點(diǎn)擊bat文件即可。(由于源代碼是simulink生成的,文件名和結(jié)構(gòu)基本上不會(huì)發(fā)生變化,所以比較適合固定的Makefile文件。如果經(jīng)常會(huì)加源文件該方法就不太適用了)

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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