15

Visual Studio にはなど$(TargetDirectory)のマクロがあります。 私のソース コードでは、. 現在、私はこれをやっています:そして、私はそれを次のようにしたいです$(OutputPath)
TargetDirectory
mLayer = mEngine->AddLayer("D:\\Projects\\abc.osg");mLayer = mEngine->AddLayer(($TargetDirectory)+"..\\..\\abc.osg");

これは一時的な要件にすぎないため、小さなデモのために自分のコードを人に渡すことができ、彼の TargetDirectory は私のディレクトリとは異なる位置に配置されています。ソース コードで Visual Studio マクロを利用する方法はありますか? (少なくとも、システム環境変数にアクセスできることは知っています)

4

6 に答える 6

12

[プロジェクト プロパティ] -> [構成プロパティ] -> [C/C++] -> [プリプロセッサ] -> [プリプロセッサ定義] に移動し、次を追加します。

TARGET_DIRECTORY=LR"($(TargetDir))"

これは、$(TargetDir) マクロの内容を含む TARGET_DIRECTORY という名前のワイド文字列リテラルを定義します。ここで重要なことは、バックスラッシュをエスケープ文字として扱わない C++ の生の文字列を作成することです。パスにはバックスラッシュが含まれています。通常の文字列リテラルを使用すると正しくなく、場合によってはコンパイラ エラーが発生することさえあります。

重要!

閉じ括弧の後に二重引用符が続く可能性があるマクロを使用する場合は、次のように、マクロ値では使用できない追加の区切り文字を使用する必要があります。

TARGET_DIRECTORY=LR"|($(TargetDir))|"

Windows ファイル システム パスの場合、パスに二重引用符を含めることができないため、これは必要ありません。

于 2014-10-08T23:46:56.907 に答える
7

これを自動的に行うことはできませんが、特定の MSBuild プロパティをプリプロセッサに渡すことができます。

<ItemDefinitionGroup>
  <ClCompile>
    <PreprocessorDefinitions>TARGET_DIRECTORY="$(TargetDirectory)"</PreprocessorDefinitions>
  </ClCompile>
</ItemDefinitionGroup>

これは、IDE で [プロジェクト プロパティ ページ] ダイアログに移動し、[構成プロパティ] -> [C/C++] -> [プリプロセッサ定義] を参照して、追加することで構成できます。

TARGET_DIRECTORY="$(TargetDirectory)"

for 文字列リテラル連結の使用が正しくないことに注意してください+。文字列リテラル (および一般的な C 文字列) は、 を使用して連結できません+。むしろ、文字列リテラルは、互いに隣接して配置するだけで連結できます。例えば、

TARGET_DIRECTORY "..\\..\\abc.osg"
于 2013-02-15T05:00:46.693 に答える
-1

これらをアプリケーションの作業ディレクトリなどに相対的にすることをお勧めします。おそらく、 http://msdn.microsoft.com/en-us/library/aa364934%28v=vs.85%29.aspxで GetCurrentDirectory 関数を確認してください。

于 2013-02-15T04:52:34.327 に答える
-1

私が知っていることではありませんが、代替手段があります。

ビルド後のステップとしてファイルをデプロイします。このステップでは、バイナリ ドロップ フォルダーを表す $(OutDir) マクロを使用できます。これは、このファイルをアプリからの相対位置に配置し、コード内でその相対位置を使用するのに役立ちます。

これは、一時的な解決策ではなく、永続的な解決策でもあります。

于 2013-02-15T04:56:07.657 に答える
-1

文字列マクロには TARGET_DIRECTORY="$(TargetDir)" の代わりに TARGET_DIRECTORY=""$(TargetDir)"" を使用します。(二重引用符に注意してください)

VS2005で私のために働きました。

于 2013-08-02T13:38:11.707 に答える