首页 > 解决方案 > 如何在没有qmake依赖的情况下制作Qt生成的makefile

问题描述

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

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”。我应该怎么办?

标签: c++qtmakefile

解决方案


这些不是“Qt”依赖项,而是“qmake”依赖项:它是 qmake 为生成您的 Makefile 而处理的文件列表。一些常见的 gcc 选项、一堆选项等gcc-base.conf需要类似的东西。sanitize.conf-fsanitize=

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

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

只是为了好玩,你可以弄乱 qmake 启动代码:去<prefix>/share/qt5/mkspecs/linux-g++-64(或任何你QMAKE_SPEC的东西);打开文件qmake.conf;注释掉最后一个字符串:#load(qt_config). 现在您的CONFIG -= qt项目应该可以正常处理了,但是生成的 Makefile 会明显变小。但是代价是 qmake 不能再做支持 Qt 的项目了(嗯,事实上,你可以load(qt_config)在你的 .pro 文件上添加它,它甚至可以工作——当然没有任何形式的保证 ;-)。


推荐阅读