2012-01-14 14 views
1

私は、ツリー内に約10の "最終"ビルド構成が設定された複雑なプロジェクトグループを持っています。各ノードには独自のオプションセットがあります。このような何か:Delphi XE2オプションにネストされた制限が設定されていますか?

  • ベース
    • リリース
      • リリースジェネリック1
        • リリース決勝1
        • ...
        • リリース最終5
      • リリースジェネリック2
        • 決勝6
        • ...
    • デバッグ
      • リリースと同じですが、デバッグので

、すべての拠点のためのリリース、リリース、リリースジェネリックX、リリースファイナルYは独自のオプションセットをファイルに保存し、参照として追加します。だから、

  • base.optset
    • Release.optset
      • リリースジェネリックが
        • リリース決勝1.optset
        • ..
    • を1.optsetています

これらのオプションセットの主な違いは、上記のツリーで構成された特定の機能(ビルドターゲットとオプションセット)を有効または無効にするさまざまなコンパイラ定義と、必要なものを含むパスの検索です。 各オプションセットには、それぞれのビルド構成に応じた異なる検索パスも含まれています。 プロジェクトグループには100以上のプロジェクトがあり、それらのほとんどはさまざまなレベルの構成で相互に関連しているため、ビルドグループもたくさんありますが、これは現在ビルドしようとしている質問とは関係ありませんプロジェクトは一度に1つです。

問題は、すべてのオプションセットが検索パスを設定していることです。 "Release Generic 1.optset"を含むまで、検索パスは正しく更新され使用されます。しかし、 "Final Final 1"と兄弟は "Release Final 1.optset"によって導入された検索パスを取得しません。 (私はコンパイラのメッセージを見て、dcc32に渡されたパラメータをチェックしたのでこれを知っています)オプションセットが無視されているように見えます。

すべては、オプションセットに "inherit = true"が設定されています。

ビルド構成には何も特定されていません。すべてのプロジェクトは、IDEとオプションセットファイルでのみ設定を使用します。

この問題/制限事項はどこに文書化されていますか?回避策はありますか?オプションではなく、参照として値を設定する

ありがとうございました。

後で編集:これは大きな欠点を持っている を基本的には、それぞれに「ジェネリック1.optsetをリリース」からtehの設定を複製: 私は移動を取得するために、かなり醜い回避策を実施することを決定した「最終リリース.optset?」 「Generic 1.optsetを解放する」に何かを追加する必要があるときに、同じ変更を伝播する5つのオプションセットファイルを編集する必要があります。

+0

MSBUILDコマンドラインツールを使用してビルド構成を明示的に指定してもこの問題は発生しますか? – LaKraven

+0

@LaKraven 開くCMDウィンドウを呼び出すと: その後、発行 rsvars.bat: MSBuildの/ T:コンパイル/ P:設定=リリース-決勝-1 はまったく同じ動作をします。今回は、オプションセットファイルの1つに条件付きの定義を設定したので、今度は余分なものに気付きました。したがって、すべてのオプションセットファイルは、少なくとも1つの検索パスと少なくとも1つの条件付き定義の両方を設定します。 これで、コマンドラインは質問に記載されているように最後のオプションセットからの検索パスを取得しませんが、デバッグ設定で設定されたものの後にDEBUG条件付き定義を追加します... – ciuly

+0

IDEしかし、すべてがうまく見えます。検索パスと条件付きの定義。結局のところ、msbuildの問題かもしれません。 – ciuly

答えて

1

最後に私は問題を把握することができました。実際には、Delphi IDEのバグで、dprojファイルのインポートが壊れてしまいます。

特に、オプションセットが一度追加された場合、残りの設定については必要なインポート条件で維持されません。

これは通常、構成を追加/削除すると、dprojが破棄され、すべての構成に対してoptsetファイルがインポートされなくなります。

しかし、いったん設定が安定してもそれらを変更しなくなると、dprojは安定したままです。

私はこれらの問題に対してdprojファイルを検証するためにアプリケーションを試してみました。それぞれの設定には、optsetファイルがimportディレクティブに含まれていることが確認されています。私はまだ忙しいので、これを自動修正するようにはまだしていません。しかし、いったん時間を見つければ、あるいはそれによって影響を受ける人が増え、自動修正が必要な場合は、私はリリースしようとします。

あなたが気づいた場合はそれまでは、オプションのセットは、特定の設定に適用されていない、単にdproj(Cfg_10のようなもの)でのconfigs IDを見つけて、あなたが

<Import Condition="'$(Cfg_10)'!='' And Exists('optset file path name')" Project="optio file path name"/> 

ない場合を見つけることができるかどうかを確認し、他の後に追加します<import calls

関連する問題