c++ - 如何在没有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”。我应该怎么办?
解决方案
这些不是“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 文件上添加它,它甚至可以工作——当然没有任何形式的保证 ;-)。
推荐阅读
- r - 如何在 R 包中重用相同的默认参数?以及如何将它们传递给嵌套函数?
- c# - 尝试实现跟随相机的播放器时Unity相机组件错误
- r - 居中 rHandsontableOutput - Shiny
- angular - 提交时的角度材料验证
- powershell - 在不使用反引号的情况下运行 PowerShell 脚本文件,其路径包含来自 Jenkins Pipeline 的空格
- android - 覆盖 onNewToken 并从 firebase 错误中获取令牌
- returnn - Return中的预训练
- python - OpenCV - 从图像中删除文本
- php - 嵌套集仅适用于类别或终端元素?
- python - 安装 python 3.7.1 后终端输出“找不到命令”