首页 > 解决方案 > 使用 CONFIG += object_parallel_to_source 时,Qt qmake 不遵循源文件夹结构

问题描述

在 Qt Creator 中构建项目时,我希望(阴影)构建目录与我的源文件夹具有相同的文件夹结构。这可以通过 .pro 文件中的(未记录的)语句来完成:

CONFIG += object_parallel_to_source

“标准”*.cpp 文件被编译,对应的 *.o 文件被放置在正确的构建文件夹中。但是... mocrcc将所有 moc_*.cpp 和 qrc_*.cpp 文件放在构建目录的顶层,而不是在相应的目录中。更糟糕的是:qmake 在指定的构建目录中再次创建完整的目录路径!!

一个例子会澄清它:说,你的来源(总结)是这样组织的:

/usr/share/myapps/project
  |_ project.pro     <= contains  'CONFIG += object_parallel_to_source'
  |_ mainfolder
  |    |_ main.cpp
  |_ subfolder1
  |    |_ class1_no_QOBJECT.cpp   
  |    |_ class2_with_QOBJECT.cpp
  |_ subfolder2
       |_ class3_no_QOBJECT.cpp
       |_ resources.qrc

并且构建目录在 Qt Creator 中指定

/usr/share/myapps/build

运行 qmake 和 make 会产生以下构建文件夹结构

 /usr/share/myapps/build
      |_ mainfolder
      |    |_ main.o
      |_ subfolder1
      |    |_ class1_no_QOBJECT.o
      |_ subfolder2
      |    |_ class3_no_QOBJECT.o
      |_ moc_class2_with_QOBJECT.cpp    <- should be in subfolder1
      |_ qrc_resources.cpp              <- should be in subfolder2
      |_ usr
           |_ share
               |_ myapps
                    |_build
                       |_ moc_class2_with_QOBJECT.o       <- should be in subfolder1
                       |_ qrc_resources.o                 <- should be in subfolder2

有没有办法防止文件夹结构翻倍?

我在 Ubuntu 18.04 上使用 Qt 5.9.1(因为这是由硬件供应商安装的 - 嵌入式 Linux)

编辑:我检查了由 qmake 创建的 Makefile。指定放置对象的行应该是

OBJECTS = /path/to/objects/<filename>.o

但实际上缺少前导反斜杠

OBJECTS = path/to/objects/<filename>.o

这是文件夹结构翻倍的根本原因。

qmake 中的错误?

标签: qtconfigqt-creatorqmake

解决方案


推荐阅读