最近工作當中遇到小需求,simulink生成各個功能模塊的代碼胆剧,為了保證在遞交給底層所有.c和.h文件接口上沒有問題粱侣,因此在生成代碼過后先自己用C編譯器編譯一次。本來前同事是利用VS侥祭,創(chuàng)建工程叁执,把源代碼加進去生成的,但是我覺得太麻煩了矮冬,每個人想編譯的時候都要安裝巨大無比的VS谈宛。
實際上,只需要mingw的gcc命令即可完成工作胎署。不過核心問題在于吆录,一共有30多個功能模塊分別單獨生成代碼,源代碼分布在30多個文件夾下面琼牧,并且模塊之間有文件關(guān)聯(lián)恢筝,因此需要寫makefile來完成關(guān)聯(lián)編譯。
由于不是計算機科班出身巨坊,對makefile的語法本身不是特別的熟悉撬槽。在網(wǎng)上找了一些模板后也存在這樣那樣的問題,實在不想去完整的看一遍makefile的語法趾撵,就另辟蹊徑利用QT的qmake來生成makefile侄柔。
總的來說,為了完成此項工作占调,過程如下圖所示:
Step 1:
打開QT勋拟,創(chuàng)建C Application工程,放在同源代碼的路徑下妈候,接下來全程下一步就好了敢靡。這時候QT會創(chuàng)建pro文件到該文件夾下。
Step 2:
右鍵點擊該工程頂層文件夾苦银,選擇加入存在的路徑啸胧,然后定位到源代碼路徑赶站,點擊start parsing,就可以掃描源代碼纺念。OK之后可以看到pro文件中加入所有源代碼贝椿。
Step 3:
打開pro文件,加入INCLUDEPATH +=陷谱,填上所有H文件所在路徑烙博,格式和SOURCES+=一樣。(由于文件太多烟逊,我是用python寫了個小腳本渣窜,把路徑打印出來粘貼到上面的)
Step 4:
保存pro文件,運行Qmake宪躯。在命令行輸入qmake Test.pro(我創(chuàng)建的工程名字為Test)乔宿,可以看到該路徑下生成了好幾個文件。
經(jīng)過對三個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文件)精置,編譯報錯終止編譯计寇,編譯結(jié)束運行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 編譯錯誤饲常,請檢查源文件
)
pause
最后保留object_script.Test.Debug文件蹲堂,刪除其余的即可狼讨。剩下的文件如下所示:
因此大功告成,之后每次只需要點擊bat文件即可柒竞。(由于源代碼是simulink生成的政供,文件名和結(jié)構(gòu)基本上不會發(fā)生變化,所以比較適合固定的Makefile文件朽基。如果經(jīng)常會加源文件該方法就不太適用了)