利用Qmake创建makefile

2018-08-07  本文已影响0人  Fitz_W

最近工作当中遇到小需求,simulink生成各个功能模块的代码,为了保证在递交给底层所有.c和.h文件接口上没有问题,因此在生成代码过后先自己用C编译器编译一次。本来前同事是利用VS,创建工程,把源代码加进去生成的,但是我觉得太麻烦了,每个人想编译的时候都要安装巨大无比的VS。

实际上,只需要mingw的gcc命令即可完成工作。不过核心问题在于,一共有30多个功能模块分别单独生成代码,源代码分布在30多个文件夹下面,并且模块之间有文件关联,因此需要写makefile来完成关联编译。

由于不是计算机科班出身,对makefile的语法本身不是特别的熟悉。在网上找了一些模板后也存在这样那样的问题,实在不想去完整的看一遍makefile的语法,就另辟蹊径利用QT的qmake来生成makefile。

构建顺序

总的来说,为了完成此项工作,过程如下图所示:

Step 1:

打开QT,创建C Application工程,放在同源代码的路径下,接下来全程下一步就好了。这时候QT会创建pro文件到该文件夹下。

建立工程

Step 2:

右键点击该工程顶层文件夹,选择加入存在的路径,然后定位到源代码路径,点击start parsing,就可以扫描源代码。OK之后可以看到pro文件中加入所有源代码。

加入待编译源代码

Step 3:

打开pro文件,加入INCLUDEPATH +=,填上所有H文件所在路径,格式和SOURCES+=一样。(由于文件太多,我是用python写了个小脚本,把路径打印出来粘贴到上面的)

添加includepath

Step 4:

保存pro文件,运行Qmake。在命令行输入qmake Test.pro(我创建的工程名字为Test),可以看到该路径下生成了好几个文件。

Qmake生成的文件

经过对三个makefile代码的查看,发现Makefile去调用Makefile.Debug和Makefile.Release所以最后我直接把使用Makefile.Debug,把里面关于QT的代码都删除,保证只编译我们需要去编译的文件。(Makefile.Debug本身并不是makefile文件,我是复制里面的代码到makefile文件夹下)

Step 5:

编写bat文件,主要是创建debug文件夹(存放.o文件),编译报错终止编译,编译结束运行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生成的,文件名和结构基本上不会发生变化,所以比较适合固定的Makefile文件。如果经常会加源文件该方法就不太适用了)

上一篇下一篇

猜你喜欢

热点阅读