【问题标题】:Why the QTCreator ignore a $BUILDDIR var to create a personal build directory为什么 QTCreator 忽略 $BUILDDIR 变量来创建个人构建目录
【发布时间】:2016-08-29 18:24:56
【问题描述】:

我正在使用 qtcreator 4.0.3 并尝试创建一个目录结构来 所有构建,如下所示:

~/Build/project01 ~/Build/project02 ... ~/Build/projectNN

我正在使用这个 .pro 文件:

:><------- Cutting ------------
#
# BUILDDIR Where the executable file was create
#
BUILDDIR = $$HOME_PATH/Builds/$$APP_NAME
#
# All Directory of temporary files
#
OBJECTS_DIR =   $$BUILDDIR/obj
MOC_DIR =       $$BUILDDIR/moc
RCC_DIR =       $$BUILDDIR/rcc
UI_DIR =        $$BUILDDIR/ui
DESTDIR =       $$BUILDDIR/bin
#
# If the dirs not exists, I'll create it
#

THis instructions are ignored
Any directory was created.
!exists( $$DESTDIR ) {
    message("Creating $$DESTDIR struct")
    mkpath( $$DESTDIR )
}
!exists( $$OBJECTS_DIR ) {
    message("Creating $$OBJECTS_DIR")
    mkpath( $$OBJECTS_DIR )
}
!exists( $$MOC_DIR ) {
    message("Creating $$MOC_DIR")
    mkpath( $$MOC_DIR )
}
!exists( $$RCC_DIR ) {
    message("Creating $$RCC_DIR")
    mkpath( $$RCC_DIR )
}
!exists( $$UI_DIR ) {
    message("Creating $$UI_DIR")
    mkpath( $$UI_DIR )
}
:><------- Cutting ------------

但这不起作用。始终 qtcreator 使用默认目录结构 在 Tools->Options->Build and Run->Default build Directory 中配置。

很简单,忽略此说明... 我是不是做错了什么??

【问题讨论】:

  • 啊,又是一个XY problem。为什么你认为你需要这些?为什么你关心构建目录中的内容?很可能您正在尝试引用由子项目构建的库或其他目标,并且您在那里遇到了问题。请解释您的项目结构如何,依赖关系是什么,以及您要解决的首要问题到底是什么。有关跨平台 dll+可执行 qmake 项目的完整演示,请参阅e.g. this answer

标签: qt qt-creator qmake


【解决方案1】:

这是一种反模式,它通常不会起作用,因为使用 qmake 项目的人都不希望它们表现得那样:Qt Creator 不会,其他人不会,等等。

对于任何给定的项目,您可以通过在构建目录中执行 qmake 来设置构建目录。例如,假设您有想要构建的 ~/src/myproject/myproject.pro

mkdir -p ~/build/myproject
cd ~/build/myproject
qmake ~/src/myproject
gmake -j8

要在子文件夹中构建多个项目,您应该有一个引用它们的顶级 subdirs 项目。例如

+--- myproject
    +--- myproject.pro
    +--- lib1
    |   +--- lib1.pro
    |   ...
    +--- lib2
    |   +--- lib2.pro
    |   ...
    +--- app1
    .   +--- app1.pro
    .   ...
    etc.

源目录结构将复制到构建文件夹中。您通常不应该关心构建文件夹中的内容,除非引用由子项目构建的目标,例如如果app1 依赖于lib2,则需要将构建产品添加为依赖项。 This answer 显示了如何做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 2011-10-03
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2012-10-10
    • 2019-01-12
    相关资源
    最近更新 更多