qmake 制作的 Makefile 只适用于我的电脑

Makefile made by qmake only works on my pc

对于一个大学项目,我们制作了一个使用 Qt 作为 GUI 的 OpenGL 应用程序。当我使用 qmake -spec macx-g++ project.pro 时,我可以创建 Makefile,如果我随后使用 make,它会正确地创建应用程序。但是,当我将完整的文件夹发送给项目中的其他人时,他做了 make 他得到了错误

Makefile:209: warning: overriding commands for target `moc_window.cpp'
Makefile:203: warning: ignoring old commands for target `moc_window.cpp'
make: *** No rule to make target `/usr/lib64/qt-3.3/mkspecs/default/qmake.conf', needed by `Makefile'.  Stop.

但是,当他在同一个文件夹中时 qmake; make 它确实可以正常工作。问题是在提交代码时我们不知道教授是否有可用的 qmake,所以我们希望它只使用 make 就可以工作。我们是否遗漏了一些应该添加的东西,以使 Makefileqmake 一起工作,而不必再次执行 qmake?我们的 .pro 文件如下。

TEMPLATE = app
TARGET = smoke

QT = core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

SOURCES += \
    fluids.cpp \
    simulation.cpp \
    visualization.cpp \
    window.cpp \
    myglwidget.cpp \
    vector.cpp \
    grid.cpp \
    scalar.cpp

HEADERS += \
    window.h \
    myglwidget.h \
    simulation.h \
    vector.h \
    grid.h \
    visualization.h \
    scalar.h

INCLUDEPATH += fftw-2.1.5/include /usr/local/include include
LIBS += -L"$$_PRO_FILE_PWD_/fftw-2.1.5/lib" -lrfftw -lfftw -framework OpenGL -framework GLUT -stdlib=libc++

QMAKE_CXXFLAGS += -stdlib=libc++
QMAKE_CXXFLAGS += -std=c++11


FORMS += \
    window.ui

构建目录不可移植。它只适用于您执行 qmake 的系统,以及您从中 运行 qmake 的特定 Qt 安装。回想一下,每个 Qt 安装都有自己的 qmake,例如如果您有三个 Qt 版本,每个版本都提供自己的 qmake,您必须使用该版本构建项目。

您发送的项目应包含 .pro 文件、源代码以及构建所需的任何其他内容,如图标文件、资源等。

要构建它,收件人应该:

  1. 创建构建文件夹。
  2. cd 进入构建文件夹。
  3. qmake /path/to/sources/project.pro && make -j

这就是您分发和构建 Qt 项目的方式。

why does qmake not build the application directly?

你为什么不自己做鞋?原因是一样的。不要重新发明轮子。

当然,工程师们有时也会心痒痒。输入 Qt Build System (qbs)。如果您的项目构建是作为 .qbs 文件给出的,那么您可以:

  1. 创建构建根文件夹。
  2. cd 进入构建根文件夹。
  3. qbs -f /path/to/sources/project.qbs - 这将构建项目。