无法为 Qt Creator/qmake 自定义构建目录
Posted
技术标签:
【中文标题】无法为 Qt Creator/qmake 自定义构建目录【英文标题】:Unable to customise the build directory for Qt Creator/qmake 【发布时间】:2015-08-04 02:31:56 【问题描述】:我在尝试指定构建目录(将所有文件复制到 DESTDIR 路径之前存储所有文件的目录)时遇到问题。
我的 .pro 文件中有以下值:
DESTDIR = E:/Development/project/build/core/debug
OUT_PWD = E:/Development/project/build/core/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
现在,所有文件最终都位于该位置,但是在构建期间,编译器始终使用“E:/Development/build/MinGW_32bit-Debug/src/core”文件夹(注意缺少的项目路径)。这很烦人,因为我想使用 /Project/build 目录作为这个位置(在我的 git repo 中没有跟踪)。
理想情况下,我希望这条路径是:E:\Development\project\build\src\core\debug
。
我想这样做的原因是构建过程具有相同的位置来包含已编译的库(它是一个子目录项目)。
我查看了Tools > Options > Build & Run > General
设置,默认构建目录是:build/build-%CurrentProject:Name-%CurrentKit:FileSystemName-%CurrentBuild:Name
我查看了我的 project.pro.user 文件,发现以下行:
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/Development/build/MinGW_32bit-Debug</value>
但是我无法更改此值。如果我直接在文件中编辑这一行,一旦我再次打开 Qt Creator,更改就会恢复。
这是 Qt Creator 的事情,还是 qmake 的事情?使用 CMake 等不同的构建系统会更好吗?
【问题讨论】:
转到屏幕左侧灰色工具栏上的Project
选项卡。确保您的项目的选项卡被选中。选择Build & Run
子选项卡。如果默认情况下未选择 MinGW 套件,请选择它。选择Build
子选项卡。构建目录供您编辑。
啊,这就是它所在的地方。奇怪的是直接编辑.user文件没有效果,但我会在那里修改它:)
编辑.user
文件有效果,但必须在项目未在Qt Creator中打开时进行。 .user
文件仅用于存储 Creator 的项目设置。 qmake 不使用它。
【参考方案1】:
通过在构建目录中启动qmake
或cmake
来“指定”构建目录。在 .pro
文件本身中设置它是没有意义的。
Qt Creator 将项目的构建目录存储在.user
文件中。当项目在 Creator 中打开时,在 Qt Creator 之外对此文件所做的任何更改都将丢失。 Creator 在打开项目时加载文件,如果不存在则创建一个新文件。
当 Creator 通过调用 qmake
或 cmake
开始构建时,它会在构建目录中启动该过程。这也是您应该从命令行手动构建项目的方式。
最后,覆盖中间构建结果的目的地几乎没有意义。它们位于构建目录中的某个位置,这才是最重要的。无论如何,您不会直接将这些文件用于任何事情。
构建qmake项目的习惯方式:
mkdir project-build
cd project-build
qmake ~/project-src
make -j
构建文件夹不应在源代码树中!
我最近开始将它们保存在 $TEMP
/ %TEMP%
:手动清除所有测试项目的陈旧版本,一段时间后就会变旧 :)
【讨论】:
谢谢,我手动将“OBJECTS_DIR”选项添加到文件中,看看是否有所不同,但我需要按照上面评论中的说明设置构建目录。 另外,我确实希望在我的项目目录中包含构建目录(我的 src 目录是我的项目目录的子目录,并且是构建的兄弟),但整个构建目录被排除在外git,并且从不致力于回购。这确保所有与项目相关的代码和编译文件都在实际项目文件夹中:)The build folder should not be within the source tree!
为什么?你有这方面的参考吗?对于其他构建系统和 IDE,这是一个非常常见的设置,例如一个build
文件夹作为子目录(当然会得到.gitignore
d)。
引用是恕我直言,称为“常识”。仅仅因为古老的 Visual Studio 做到了,并且 - 可悲的是 - 继续这样做,并不意味着有任何理由这样做。据我所知,源代码可以在 CD 上并且是只读的。没有理由写入源代码文件夹。事实上,在大型和复杂的构建中,可能存在细微的构建系统错误,这些错误可能会产生不可重现的构建,因为一些垃圾被写入源文件夹。当我进行 CI 构建时,我会在构建之前将其设置为只读的 tempfs 中进行浅 git checkout。在我的开发机器上,构建位于临时文件夹中。以上是关于无法为 Qt Creator/qmake 自定义构建目录的主要内容,如果未能解决你的问题,请参考以下文章