如何使Qt生成的makefile不依赖qmake 我在Linux中使用QT创建者来做我的非QT C++项目。我发现Qt创建者会为我制作一个makefile。我想将所有项目移动到一台没有任何qt或qmake的计算机中,但我自己无法真正编辑makefile。正如我在谷歌上看到的,有人说添加一个CONFIG-=qt标志可以生成一个没有任何qt组件的纯g++生成文件,但实际上不是

如何使Qt生成的makefile不依赖qmake 我在Linux中使用QT创建者来做我的非QT C++项目。我发现Qt创建者会为我制作一个makefile。我想将所有项目移动到一台没有任何qt或qmake的计算机中,但我自己无法真正编辑makefile。正如我在谷歌上看到的,有人说添加一个CONFIG-=qt标志可以生成一个没有任何qt组件的纯g++生成文件,但实际上不是,c++,qt,makefile,C++,Qt,Makefile,我的项目中的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

我的项目中的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
,一些
-fsanize=
选项需要
sanitize.conf
,等等

因此,它是Makefile本身所依赖的文件列表(用于自动再生等)。当然,如果您不打算在qmake的帮助下重新生成Makefile,您可以一次删除所有这些行

您抱怨说,尽管在.pro中有
CONFIG-=qt
,但仍然有一堆
qt_CONFIG.prf
和该列表中提到的其他此类文件。这是真的,但是qmake启动脚本是这样设计的:首先,所有与Qt相关的东西都是无条件预配置的;然后处理用户项目;然后,只有当
CONFIG+=qt
时,相关的qt内容才最终被启用


只是为了好玩,你可以搞乱qmake启动代码:转到
/share/qt5/mkspecs/linux-g++-64
(或者你的
qmake_SPEC
是什么);打开文件
qmake.conf
;注释掉最后一个字符串:
#load(qt\u config)
。现在,您的
CONFIG-=qt
项目应该可以正常处理了,但是生成的Makefile将大大减小。但代价是qmake不能再做支持Qt的项目了(事实上,你可以在.pro文件上添加
load(Qt_config)
,它甚至可以工作-当然,没有任何形式的保证;-)。

据我所知
config-=Qt
只从你构建的二进制文件中删除Qt库依赖项。我想知道makefiles是否完全可以独立于qmake。您可以尝试手动删除makefile中与Qt有关的任何内容,并尝试在以后是否仍然工作。如果工具没有输出您想要的内容,则您可以a)修改工具或b)修改输出或c)将工具添加到修改该输出的链中。