2016-03-21 5 views
0

を設定するカスタムビルドルールを失って続けて、私はVC++ 2008にのVisual C++ 2008は、様々な「退屈」な理由でそう

を使用してこだわっている今、私は「.H」ファイルを解析し、生産カスタムビルドルールを持っています.cpp。

私は.vcprojで設定を取得することができたときにビルドルールが正常に動作します(これは、各<ファイルについて< FileConfiguration>要素の子として<ツール名=「私のルール」/ >要素として表示されます>要素)。

".rule"ファイルで、私が指定したFileExtension属性は、すべての.hでカスタムルールを実行しないように "* .h"ではなく "* .hxx"です。私はそれが欲しい。 .h以外のものにルールを実行するためにファイルの拡張子を変更することは、私がコントロールできない理由のためのオプションではありません。

ルールが正常に動作し、生成された.cppがコンパイルされる、依存関係などは、すべての作業です - 手動で取得します.vcprojでXMLをハッキングすなわちVC++が唯一のカスタム・ステップを行います.hの変更など

問題は、Visual Studio GUIがツール設定を邪魔して、 ".vcproj"から削除してしまうという問題です。私はVisual Studioがどんな条件で厳密に決定していないのか、それはややランダムですが、ほとんどの場合、プロジェクトの変更を保存する必要があるときは私の見解です。

時々(必ずしもそうではありません)私はビジュアルスタジオのGUIのプロパティページでツールを手動で変更でき、それをアクティブな構成(たとえば "デバッグ")用に保存しますが、他の設定(例えば、「リリース」または「すべての構成」)、GUIは混乱し、他の構成用に追加するのではなく、すべての構成用のツール設定を削除します。

これは、私が最初にアクティブな設定を変更した場合にも起こりそうです - >あなたが混乱したカスタムツールを設定すると、すべての設定から設定を削除します。

カスタムルールの入力ファイルに固有の拡張子が付いていても、「.h」と一致する入力名と.hのデフォルトルールと関連しているようです私の ".rule"ファイルは対応するマッチングパターンを指定していないことに注意してください。

FileExtensionパターンと一致しないこの設定は、VC++ 2008のMSDNで推奨されているものですので、このようにしました。

誰も同じような問題がありましたか?堅牢なソリューションや回避策が何であるかについての手掛かりはありますか?

NOOBSがVSのGUIを使用している可能性があるというコンテキストで設定を保存するだけで、「特定のこと」をしないように信じることはできません。

+0

へようこそSO :-)すべてのあなた「の.h」ファイルに「いくつかのfunkiness」を買ってあげるのプロジェクトのためのルールをカスタムビルドにファイルをルールに追加した場合

は、もう少ししてくださいあなたが何をしようとしたのか、どんなことを期待しているのかなどを質問するときに特有です。[参照する方法](http://stackoverflow.com/help/how-to-ask) – Nehal

+0

過度に冗長である - それはすでにかなり長い質問です。質問に答えることができる誰もが、問題の私の説明に多くの細部があることを知っていると確信しています。また、私が試みた様々なことはかなり明確だと思います。また、あなたが私が期待していることを理解していないことをより具体的に説明してください。 – user6092647

答えて

0

OK、ここで多くのことを考えて、私が思うことができる他の場所では、私はまだIDEがカスタムビルドツールを削除するのを防ぐという実際の解決策には喜んでいません拡張パターンがファイルと一致しないときに設定します。

回避策として、「* .h」パターンを使用するようにルールを変更し、カスタムコマンドを実行する必要があるかどうかを確認するテストを行いました。以下は、ケースの誰で私の「FunkyRule.rules」ファイルである私がやったことを見ている必要があります

<?xml version="1.0" encoding="utf-8"?> 
<VisualStudioToolFile 
    Name="Funky code generator" 
    Version="8.00" 
    > 
    <Rules> 
     <CustomBuildRule 
      Name="Funky" 
      DisplayName="Funky code generator" 
      CommandLine="IF NOT EXIST $(InputFileName) goto :notFound &#x0D;&#x0A; 
         NeedsFunky $(InputFileName) 1>nul || goto :notFound &#x0D;&#x0A; 
         echo Generating Funky things for $(InputFileName) &#x0D;&#x0A; 
         FunkyCodeGenerator $(InputFileName) -o &quot;.\GeneratedFiles\funky_$(InputName).cpp &quot;&#x0D;&#x0A; 
         goto :done &#x0D;&#x0A; 
         :notFound &#x0D;&#x0A; 
         exit 0 &#x0D;&#x0A; 
         :done &#x0D;&#x0A;" 
      Outputs=".\GeneratedFiles\funky_$(InputName).cpp" 
      AdditionalDependencies="$(InputFileName)" 
      FileExtensions="*.h" 
      ShowOnlyRuleProperties="false" 
      > 
      <Properties> 
      </Properties> 
     </CustomBuildRule> 
    </Rules> 
</VisualStudioToolFile> 

このCustomBuildRuleは、2つの外部コマンド「NeedsFunky」と「FunkyCodeGenerator」が必要。 "NeedsFunky"は、入力.hが "FunkyCodeGenerator"の有効な入力で、そうでない場合は0でない場合に0を返すコマンドです。 "FunkyCodeGenerator"は、入力として.hを引数にとり、出力ファイルを指定するには-oオプションが必要な "ファンキーネス"を実行するコマンドです。 このコンテキスト(つまり、Visual Studioが結果の一時的な.batファイルを呼び出す環境)では、通常の「IF errorlevel」構文を使用してIF文を作成するのに問題があったため、珍しい「cmd || goto:failLabel "構築する。あなたは、これはあなたが自動的に

関連する問題