如何使QT生成的makefile无QMAKE依赖性

How to make makefile generated by Qt without qmake dependency

本文关键字:makefile QMAKE 依赖性 何使 QT      更新时间:2023-10-16

我在linux中使用QT创建者来制作我的非QT C 项目。我发现QT创造者会为我做一个制作。我想在没有任何QT或QMAKE的情况下将所有项目都移至计算机中,但是我自己无法真正编辑Makefile。当我Google时,有人说添加配置 - = QT标志可以使纯G makefile无需任何QT组件,但实际上不能。

我项目中的pro文件是这样的:

QMAKE_LFLAGS += -no-pie
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
INCLUDEPATH += /home/MyName/opencvBuild/install/include/opencv4/
LIBS += -L/home/MyName/opencvBuild/install/lib/ 
        -lopencv_core 
SOURCES += 
        main.cpp 
    helloopencv.cpp
HEADERS += 
    helloopencv.hpp

,makefile产生了数千个QT依赖项,例如:

.....
###### Files
SOURCES       = ../HelloOpenCV/main.cpp 
        ../HelloOpenCV/helloopencv.cpp 
OBJECTS       = main.o 
        helloopencv.o
DIST          = ../Qt/5.12.0/gcc_64/mkspecs/features/spec_pre.prf 
        ../Qt/5.12.0/gcc_64/mkspecs/common/unix.conf 
        ../Qt/5.12.0/gcc_64/mkspecs/common/linux.conf 
        ../Qt/5.12.0/gcc_64/mkspecs/common/sanitize.conf 
        ../Qt/5.12.0/gcc_64/mkspecs/common/gcc-base.conf 
.....

现在,当我在终端中调用make命令时,它将自动链接到qmake。我不希望我的makefile中任何" QT"。我该怎么办?

这些不是" qt" - 依赖性,而是" qmake"依赖性:它是Qmake已处理的文件列表,以生成您的makefile。某些常见的GCC选项需要gcc-base.conf之类的内容,sanitize.conf用于一堆-fsanitize=选项,依此类推。

因此,这是您的makefile本身的文件列表取决于(用于自动再生等)。当然,如果您不打算在Qmake的帮助下再生Makefile,则可以一次删除所有这些行。

您抱怨说,尽管您的.pro中有 CONFIG-=qt,但该列表中仍然提到了一堆qt_config.prf和其他此类文件。这是正确的,但是QMAKE启动脚本以这种方式精确设计:首先,所有与QT相关的内容is 无条件预先配置;然后处理用户项目;然后,只有当CONFIG += qt时,相关的QT东西最终才能启用。

只是为了娱乐,您可以弄乱Qmake启动代码:转到<prefix>/share/qt5/mkspecs/linux-g++-64(或QMAKE_SPEC IS);打开文件qmake.conf;评论最后一个字符串:#load(qt_config)。现在,您的CONFIG -= qt项目应该可以处理,但是由此产生的Makefile将大大较小。但是价格是Qmake不能再做启用了QT的项目(好吧,实际上,您可以在.pro文件之上添加load(qt_config),甚至可以工作 - 当然没有任何形式的保证; - )。