如何让我的基于 makefile 的 C++ 项目以最短和最简单的方式使用 QT 库?
Posted
技术标签:
【中文标题】如何让我的基于 makefile 的 C++ 项目以最短和最简单的方式使用 QT 库?【英文标题】:How to get my makefile-based C++ project to work with QT library shortest and simplest way? 【发布时间】:2018-02-13 13:08:21 【问题描述】:我有一个基于 Makefile 的 C++ 项目。 我使用 Eclipse 和 IDE(在 Ubuntu 上),它与 Makefile 完美配合。我自己手动编写Makefile,所以我不需要任何可以自动生成它的东西。
听说QT使用自己的qmake
buld系统,从.pro项目文件生成Makefile:
除了 Qt Creator 之外,Qt 还提供了 qmake,这是一个跨平台的构建脚本生成工具,可以自动为跨平台的开发项目生成 Makefile。
Eclipse QT 插件描述说:
Qt Eclipse Integration 无缝集成了整个 Qt 开发工作流程: 纯基于 qmake 的项目管理(不强加 Eclipse 特定的项目文件格式),带有 .pro 文件导入器和图形项目编辑器
似乎如果我想使用 Qt,它绝对必须使用它自己的 qmake
构建系统,它将生成 makefile。我不喜欢这个想法,因为我的 Makefile 太复杂了,我不想花很多精力来弄清楚如何将我的整个 Makefile 转换为 .pro 文件或类似文件。
-
有什么方法可以像使用任何其他库一样使用 Qt,将其安装到系统中,包括我的代码中的头文件并提供包含它的链接器路径?在不改变整个构建系统的情况下,即坚持使用手动编辑的 makefile 而不是使用 QtEditor,而是像以前一样使用 Eclipse?我不需要任何与 GUI 相关的 Qt 东西。
我一定要使用
qmake
吗?我可以像以前一样只使用make
命令吗?
【问题讨论】:
我相信您可以像使用其他 C++ 库和现有 Makefile 一样使用 Qt 库。但是,要使 Qt 的信号/插槽正常工作,您必须编写额外的规则来处理 moc 标头。有很多例子。例如这里:gist.github.com/mishurov/8134532 或 ***.com/a/17330017/2674506。 您可以在源目录中有一个Makefile
,在project.pro
上运行qmake
,然后在qmake
的输出目录中的Makefile
上运行make
跨度>
@Caleth doc.qt.io 说project files will use a straightforward declarative style, defining standard variables to indicate the source and header files that are used in the project
。所以project.pro
将包含有关源代码文件的信息,但它已经在我现有的Makefile
中。我必须根据makefile自己编写.pro吗?那么保留原始 Makefile 有什么意义呢?
例如:您有my_gui_class.hpp
、my_gui_class.cpp
和my_gui_form.ui
在project.pro
中,您将它们列在适当的部分中。当您运行qmake
时,它将生成一个Makefile
,其中包含my_gui_class_moc.cpp : moc my_gui_class.hpp
之类的规则,它将生成信号和插槽所需的字符串表等,ui_my_gui_form.h : uic my_gui_form.ui
将生成一个基于QWidget
的表单类。 my_gui_class.cpp
指的是 ui_my_gui_form.h
,即使该文件是构建工件(未在源代码控制中提交,将死于 make clean
等)
我更乐意看到 moc 标头/资源的附加规则,而不是 *.pro
和 qmake
附加到 makefile 构建。
【参考方案1】:
我相信您可以像使用其他 C++ 库和现有 Makefile 一样使用 Qt 库。您只需将任何 Qt 应用程序或库视为具有特定依赖关系的常规 C++ 应用程序或库。
然而,Qt 的信号/槽功能需要使用 Qt 的 moc 实用程序生成一些额外的代码。对于 Qt4 项目尤其如此,如果您使用基于“传统”宏的信号/插槽连接。所以你必须在你的 Makefile 中编写额外的规则来处理 moc 头文件。有很多关于如何做到这一点的例子。例如:this 或 this。
【讨论】:
以上是关于如何让我的基于 makefile 的 C++ 项目以最短和最简单的方式使用 QT 库?的主要内容,如果未能解决你的问题,请参考以下文章
c++ - 如何使用make链接c ++中不同目录中的对象而不在makefile中引用它们?