如何在没有qmake依赖的情况下使Qt生成makefile

ggi*_*der 2 c++ qt makefile

我在linux中使用Qt creator来制作我的非Qt c ++项目.我发现Qt创建者会为我制作一个makefile.我想将所有项目移动到没有任何qt或qmake的计算机中,但我自己无法真正编辑makefile.当我谷歌有人说添加一个CONFIG - = 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
Run Code Online (Sandbox Code Playgroud)

并且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 \
.....
Run Code Online (Sandbox Code Playgroud)

现在,当我在终端中调用make命令时,它会自动链接到qmake.我的makefile中不需要任何"Qt".我该怎么办?

Mat*_*att 5

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

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

你抱怨说,尽管CONFIG-=qt你的.pro中有一些,但仍然有一些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文件,它甚至可以工作 - 当然没有任何形式的保证;-).