最近工作當(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。

總的來說,為了完成此項(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è)小腳本,把路徑打印出來粘貼到上面的)

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

經(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ì)加源文件該方法就不太適用了)