7

为了让我的 Qt 项目有条理(使用 Qt Creator),我有一个 .pro 文件和多个 .pri 文件。就在最近,我在我的一个 .pri 文件中添加了一个类,该文件与一个单独的 .pri 文件中已经存在的类具有相同的文件名。

qmake 生成的文件结构和 makefile 似乎没有注意到随之而来的文件名冲突。生成的 moc_* 文件都被扔到同一个子目录中(取决于发布或调试),一个最终覆盖另一个。当我尝试制作该项目时,我收到几个如下所示的警告:

Makefile.Release:318: warning: overriding commands for target `release/moc_file.cpp`

并且项目无法链接。

这是我正在谈论的一个简单示例。

目录结构:

+ 项目目录
| + 子目录1
| | - 文件.h
| | - 文件.cpp
| + 子目录2
| | - 文件.h
| | - 文件.cpp
| - main.cpp
| - 项目.pro
| - subdir1.pri
| - subdir2.pri

project.pro的内容:

TARGET = project
TEMPLATE = app
include(subdir1.pri)
include(subdir2.pri)
SOURCES += main.cpp

subdir1.pri 的内容:

HEADERS += subdir1/file.h
SOURCES += subdir1/file.cpp

subdir2.pri 的内容:

HEADERS += subdir2/file.h
SOURCES += subdir2/file.cpp

有没有办法告诉 qmake 生成一个系统,将 moc_* 文件从单独的 .pri 文件放入单独的子目录中?

4

3 回答 3

4

subdir1.pri尝试附加

MOC_DIR = "subdir1/MOCFiles"

也为subdir2.pri

MOC_DIR = "subdir2/MOCFiles"

它没有经过测试。只是检查一下。希望它会奏效。

编辑 1: MOCFiles 是您想要的 moc 文件进入的文件夹。

编辑 2:我刚刚停止提及 MOC 文件目录,因为在问题中专门提出了这一点。但此外,您可能还必须将以下内容添加到每个 pri 文件中。(确保不同 *.pri 文件的文件夹不同)

RCC_DIR = "subdir1/RCCFiles"
UI_DIR = "subdir1/UICFiles"
OBJECTS_DIR = "subdir1/ObjFiles"

我相信拥有多个 pri 文件可以通过具有相同的文件名来工作而不会发生冲突。既然您已经接受了一个答案(这表明这是不可能的),请进行上述更改并尝试一下。如果它不起作用,请告知。

于 2010-06-03T05:48:20.547 回答
3

最好的办法是确保所有文件都有一个唯一的名称。除了 qmake 之外,还有其他工具会在您尝试做您正在做的事情时中断;你也可能让自己感到困惑(例如,理解什么#include "file.h"更困难)。

于 2010-06-02T22:46:50.500 回答
0

我以前试过这个。简短的回答是以某种方式对它们进行不同的命名。另一个答案是将每个子目录视为一个单独的库,具有自己的 .pro 文件,并使用 subdirs 类型来编译所有库目录。

如果你真的想调查一个完整的答案,你可以指定用于 moc 的工具。在这种情况下,您可以修改名称,以便为两个不同的文件使用稍微不同的名称。但是,您还需要确保将每个不同名称的文件添加到要编译和链接的文件列表中,并且不添加最初命名的 moc 文件(否则您的构建将失败)。

于 2010-06-03T17:29:43.933 回答