zoukankan      html  css  js  c++  java
  • qmake生成的Makefile在make install时遇到的一次错误

    遇到问题

    使用qmake管理的一个项目,发现在进行make install时报错,错误信息如下:

    1 /home/XXX/Qt/bin/qmake -install qinstall -exe /home/XXX/teststrip/aaa.h /home/XXX/teststrip/install/aaa.h
    2 strip /home/XXX/teststrip/install/aaa.h
    3 strip: /home/XXX/teststrip/install/aaa.h: file format not recognized
    4 make: [Makefile:612:install_inc] 错误 1 (已忽略)

    问题分析

    查看Makefile文件,分析问题,发现

    1 ####### Install
    2 
    3 install_inc: first FORCE
    4     @test -d $(INSTALL_ROOT)/home/XXX/teststrip/install || mkdir -p $(INSTALL_ROOT)/home/XXX/teststrip/install
    5     -$(QINSTALL_PROGRAM) /home/XXX/teststrip/aaa.h $(INSTALL_ROOT)/home/XXX/teststrip/install/aaa.h
    6     -strip $(INSTALL_ROOT)/home/XXX/teststrip/install/aaa.h

    不知为何会多出strip。

    错误排查

    首先怀疑是pro写错了,先来验证pro正确性,原pro文件内容截取后如下:

    HEADERS += aaa.h
    SOURCES += aaa.cpp main.cpp
    
    inc.files += aaa.h
    inc.path += $$PWD/install
    
    INSTALLS += inc

    新增一段安装脚本

    kk.files += bbb.h
    kk.path += $$PWD/install
    INSTALLS += kk

    然后touch 文件bbb.h。重新qmake加make install:

    /home/XXX/Qt/bin/qmake -install qinstall /home/XXX/teststrip/bbb.h /home/XXX/teststrip/install/bbb.h

    bbb.h文件是正确的,打开Makefile文件,查看

    install_kk: first FORCE
        @test -d $(INSTALL_ROOT)/home/XXX/teststrip/install || mkdir -p $(INSTALL_ROOT)/home/XXX/teststrip/install
        -$(QINSTALL) /home/XXX/teststrip/bbb.h $(INSTALL_ROOT)/home/XXX/teststrip/install/bbb.h

    kk字段的install脚本是正确的,说明脚本写的是正确的。

    进一步分析,为何文本的aaa.h文件会被处理为可执行文件(目标文件)?之所以说是将.h文件当作目标文件是因为安装命令中的strip,strip是用来给目标文件瘦身的,它用来删除目标文件中的符号表。

    有了上述的分析之后,忽然想到查看一下文件的权限:

    ls -l

    发现果然是权限搞错了:

    -rwxrwxr-x 1 XXX XXX    59 11月 23 08:35 aaa.h
    -rw-rw-r-- 1 XXX XXX     0 11月 23 11:28 bbb.h

    修复aaa.h的权限

    chmod -x aaa.h

    重新qmake之后查看Makefile:

    install_inc: first FORCE
        @test -d $(INSTALL_ROOT)/home/XXX/teststrip/install || mkdir -p $(INSTALL_ROOT)/home/XXX/teststrip/install
        -$(QINSTALL) /home/XXX/teststrip/aaa.h $(INSTALL_ROOT)/home/XXX/teststrip/install/aaa.h

    重新make install,正确。至此,错误清除。

    总结

    注意文件权限引起的make Install错误。

  • 相关阅读:
    判断鼠标在按钮区域上面
    在MFC下绘制直线,使用橡皮筋技术,可以使直线效果跟随鼠标移
    三缓冲
    MFC--自己优化滚动条的双缓冲绘图方法
    MFC视图切换大全总结
    各种线程:事件、互斥量、信号量、临界区 的用法,我自己做的,有用,附件里面有,博客附件里面有
    http://www.cctry.com/forum.php?mod=viewthread&tid=800&reltid=4131&pre_thread_id=0&pre_pos=3&ext=
    关于Mac下pycharm无法调用摄像头权限的问题
    终于理解清楚attention,利用attention对黄金价格进行预测
    tensorboard在colab中的实现
  • 原文地址:https://www.cnblogs.com/nuoforever/p/14023647.html
Copyright © 2011-2022 走看看