14

絶対パスはばかげています。必要なことは、シャドウ ビルド用の .pro ファイルを含むフォルダーと同じレベルのフォルダーを使用することだけです。それ以外にもバグがあります。

../mingw_debugただし、たとえば指定することはできません。はい、それは相対パスですが、何に対して相対的ですか? Qt Creator の現在のディレクトリからの相対パスであることが判明しましたが、これはまったく意味がありません。

%{sourceDir}も役に立ちません。%{sourceDir}/../mingw_debug少なくとも Windows では動作しません。sourceDir から親フォルダーを抽出する方法があれば!

問題を解決する方法を知っている人はいますか?

4

4 に答える 4

0

qt-creator が定義するシャドウ ビルドとは異なりますが、以下を使用してきちんとしたビルド構造を取得しています。

複数のターゲット用に、またテスト モードでビルドしたライブラリのプロファイル ファイルからの抜粋。

TARGET = ../lib/common
message("libcommon:")

contains(CONFIG,test){
  message("Building Test")
  DESTDIR = test
  TARGET = $$TARGET-test
}else{
  message("Building Program")
  DESTDIR = program
  TARGET = $$TARGET
}

contains(MEEGO_EDITION,harmattan){
  message("Maemo Harmattan")
  DESTDIR = $$DESTDIR-maemo6
  TARGET = $$TARGET-maemo6
  DEFINES += MAEMO MAEMO6
}
unix:!maemo5:!contains(MEEGO_EDITION,harmattan){#desktop
  message("Desktop")
  DESTDIR = $$DESTDIR-desktop
  TARGET = $$TARGET-desktop
}

contains(CONFIG,test){
  TEMPLATE = app
  SOURCES += $$files(src_test/main.cpp)
  HEADERS += $$files(src_test/*.h)
  INCLUDEPATH += src_test
}else{
  TEMPLATE = lib
  CONFIG += staticlib
}

CONFIG(debug, debug|release) {
  message("Debug")
  DESTDIR = $$DESTDIR-debug
  CONFIG += debug
  DEFINES += DEBUG
  TARGET = $$TARGET-debug
}else{
  message("Release")  
  //DEFINES += QT_NO_DEBUG_OUTPUT
  DESTDIR = $$DESTDIR-release
  TARGET = $$TARGET-release
}
MOC_DIR = build/$${DESTDIR}/moc
OBJECTS_DIR = build/$${DESTDIR}/obj
UI_DIR = build/$${DESTDIR}/ui

したがって、すべてのオブジェクト、moc、gui ファイルを別々のディレクトリ (例: libcommon/build/program-desktop-debug/moc) に取得し、バイナリを別の名前で同じディレクトリに取得します。1 つまたは別のビルドをトリガーするには、ビルド ターゲットで CONFIG+= を設定するだけです。そして、この構造は pro ファイルにのみ依存し、その一部を common.pri に配置して、すべてのプロジェクトで使用できます。shadow-build 構成はもう必要ありません。ちなみに、pro ファイルは libcommon/libcommon.pro にあります。

于 2012-08-10T23:20:38.093 に答える
-1

これを管理しやすくするために使用できるものがいくつかあります。

$$_PRO_FILE_PWD_(バージョン> = 4.5)変数には、読み取られている現在のプロファイルのディレクトリが含まれます。

.qmake.cacheプロジェクトのルートディレクトリにあるファイルを使用して、ディレクトリの変数を定義します。

PROJECT_DIR = $$PWD

次に、それを使用してルートから始めてナビゲートします。

于 2012-09-21T11:07:15.027 に答える