美文网首页
利用Qmake创建makefile

利用Qmake创建makefile

作者: Fitz_W | 来源:发表于2018-08-07 00:46 被阅读0次

    最近工作当中遇到小需求,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文件。如果经常会加源文件该方法就不太适用了)

    相关文章

      网友评论

          本文标题:利用Qmake创建makefile

          本文链接:https://www.haomeiwen.com/subject/lfwnvftx.html