gpt4 book ai didi

c++ - 如何防止 qmake 在此 "moc"构建方案中创建额外的 'out of source' 文件夹?

转载 作者:太空狗 更新时间:2023-10-29 21:28:07 26 4
gpt4 key购买 nike

(抱歉,除了包括以下细节之外,我想不出更好的解释方式)

预构建结构:

F:\
└ Project\
└ Project.pro
└ ProjectSettings.pri
└ Source\
└ Source.pro
└ My_Library\
└ My_Library.pro
└ library.cpp
└ ...

“Project.pro”的内容:

TEMPLATE = subdirs
SUBDIRS = Source

“Source.pro”的内容:

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += My_Library

“My_Library.pro”的内容:

include(../../ProjectSettings.pri)

TEMPLATE = lib
SOURCES += library.cpp

“ProjectSettings.pri”的内容

TARGET = $$basename(_PRO_FILE_PWD_)

Debug:buildDir = "Debug"
Release:buildDir = "Release"

DESTDIR = $$PWD/$$buildDir/bin
OBJECTS_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/obj
MOC_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/moc
RCC_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/rcc
UI_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/gui

构建后结构:

F:\
└ Project\
└ Project.pro
└ ProjectSettings.pri
└ Source\
└ Source.pro
└ My_Library\
└ My_Library.pro
└ library.cpp
└ Debug\
└ bin\
└ libMy_Library.a
└ My_Library\
└ moc\
└ obj\
└ library.o
└ My_Library\ <------ WTF
└ moc\
└ Release\
└ bin\
└ libMy_Library.a
└ My_Library\
└ moc\
└ obj\
└ library.o

问题

思路是

  • 在项目文件夹中运行qmake -recursive
  • 构建所有指定的子项目
  • 吐出一堆组织良好的中间文件
  • 并将子项目的所有二进制文件放在一个文件夹中
  • 所有这些都根据调试或发布范围进行隔离

它似乎工作得很好,除了项目文件夹中每个“子项目”的额外文件夹外,每个子项目都包含一个 moc 文件夹,我在上面突出显示了“WTF”*

问题

  1. .pro 文件中的哪些(组合)指令生成“WTF”文件夹?
  2. “WTF”文件夹有什么用? (请记住调试和发布范围指定它们自己的 moc)
  3. 有没有办法阻止创建“WTF”文件夹?

我还没有任何会导致 MOC 输出 moc 文件的源文件,所以目前所有的 moc 文件夹都是空的。

* "WTF"= "什么文件夹"

最佳答案

1. 文件夹是在调试和发布范围运行之前创建的。 qmake 生成一个主 make 文件 (Makefile),如果有要构建的源代码:两个子 make 文件(Makefile.Debug Makefile.Release).范围是为子级设置的,而不是为父级设置的,因此 qmake 决定它必须创建不存在的文件夹。

2. 据我所知,它没有用于任何用途。

3. 通过添加一个已经存在的 buildDir 定义(在本例中为 Source),qmake 不会创建任何额外的临时文件夹。此外,应修改范围测试(有关原因的解释,请参见 herehere)。这归结为以下 ProjectSettings.pri:

PROJECT_NAME = $$basename(PWD)
TARGET = $$basename(_PRO_FILE_PWD_)

buildDir = Source
CONFIG( debug, debug|release ) {
buildDir = "Debug"
} else {
buildDir = "Release"
}

DESTDIR = $$PWD/$$buildDir/bin
OBJECTS_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/obj
MOC_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/moc
RCC_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/rcc
UI_DIR = $$PWD/$$buildDir/$$basename(_PRO_FILE_PWD_)/gui

不太确定为什么会这样,但它似乎可以解决问题。

关于c++ - 如何防止 qmake 在此 "moc"构建方案中创建额外的 'out of source' 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com