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错误。

  • 相关阅读:
    leetcode-15 三数之和
    leetcode-113 路径之和
    leetcode-112 路径之和
    leetcode-1 两数之和
    leetcode-215 第k大元素
    leetcode 698 集合k划分
    编程之法之字符串
    LeetCode 830. Positions of Large Groups
    LeetCode 821. Shortest Distance to a Character
    LeetCode 213. House Robber II
  • 原文地址:https://www.cnblogs.com/nuoforever/p/14023647.html
Copyright © 2011-2022 走看看