从源代码访问Visual Studio宏?

时间:2013-02-15 04:47:18

标签: visual-studio-2010 visual-c++ visual-studio-macros

Visual Studio包含$(TargetDirectory)$(OutputPath)等宏 在我的源代码中,我想指定从TargetDirectory以下几级文件夹加载文件的相对路径。
目前我这样做:mLayer = mEngine->AddLayer("D:\\Projects\\abc.osg");我希望它像mLayer = mEngine->AddLayer(($TargetDirectory)+"..\\..\\abc.osg");

这只是一个临时要求,因此我可以将我的代码提供给一个人进行小型演示,并且他的TargetDirectory与我的目录不同。有没有办法在源代码中使用Visual Studio宏? (至少我知道可以访问系统环境变量)

5 个答案:

答案 0 :(得分:9)

转到项目属性 - >配置属性 - > C / C ++ - >预处理器 - >预处理器定义并添加以下内容:

TARGET_DIRECTORY=LR"($(TargetDir))"

这定义了一个名为TARGET_DIRECTORY的宽字符串文字,其中包含$(TargetDir)宏的内容。这里重要的是,这会创建一个C ++原始字符串,不会将反斜杠视为转义字符。路径包含反斜杠。使用常规字符串文字是不正确的,甚至在某些情况下会给你编译器错误。

重要!

如果您使用的宏可能包含右括号后跟双引号)"您必须使用宏值中不会出现的其他分隔符,例如:

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

对于Windows文件系统路径,这不是必需的,因为路径不能包含双引号。

答案 1 :(得分:7)

您不能自动执行此操作,但可以将特定的MSBuild属性传递给预处理器:

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

这可以通过转到Project Property Pages对话框在IDE中进行配置,浏览到Configuration Properties - &gt; C / C ++ - &gt;预处理器定义,并添加

TARGET_DIRECTORY="$(TargetDirectory)"

请注意,使用+进行字符串文字连接是不正确的:字符串文字(通常是C字符串)不能使用+连接。相反,字符串文字可以简单地通过将它们彼此相邻放置来连接。例如,

TARGET_DIRECTORY "..\\..\\abc.osg"

答案 2 :(得分:-1)

我建议将这些相对于应用程序的工作目录或其他内容。也许可以在http://msdn.microsoft.com/en-us/library/aa364934%28v=vs.85%29.aspx查看GetCurrentDirectory函数。

答案 3 :(得分:-1)

不是我知道但我有另一种选择。

将文件部署为构建后步骤。在此步骤中,您可以使用代表二进制文件drop文件夹的$(OutDir)宏。这可以帮助您将此文件放在应用程序的相对位置,并在代码中使用该相对位置。

这也是一个持久的解决方案,而不是暂时做的事情。

答案 4 :(得分:-1)

对字符串宏使用TARGET_DIRECTORY =“”$(TargetDir)“”而不是TARGET_DIRECTORY =“$(TargetDir)”。 (注意双引号)

在VS2005为我工作。