Nav*_*Nav 12 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宏?(至少我知道可以访问系统环境变量)
Tom*_*Tom 10
转到项目属性 - >配置属性 - > C/C++ - >预处理器 - >预处理器定义并添加以下内容:
TARGET_DIRECTORY=LR"($(TargetDir))"
Run Code Online (Sandbox Code Playgroud)
这定义了一个名为TARGET_DIRECTORY的宽字符串文字,其中包含$(TargetDir)宏的内容.这里重要的是,这会创建一个C++原始字符串,不会将反斜杠视为转义字符.路径包含反斜杠.使用常规字符串文字是不正确的,甚至在某些情况下会给你编译器错误.
重要!
如果使用可能包含右括号后跟双引号的宏,则"必须使用宏值中不能出现的附加分隔符,例如:
TARGET_DIRECTORY=LR"|($(TargetDir))|"
Run Code Online (Sandbox Code Playgroud)
对于Windows文件系统路径,这不是必需的,因为路径不能包含双引号.
您不能自动执行此操作,但可以将特定的MSBuild属性传递给预处理器:
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>TARGET_DIRECTORY="$(TargetDirectory)"</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)
这可以在IDE中进行配置,方法是转到Project Property Pages对话框,浏览到Configuration Properties - > C/C++ - > Preprocessor Definitions,然后添加
TARGET_DIRECTORY="$(TargetDirectory)"
Run Code Online (Sandbox Code Playgroud)
请注意,+
对字符串文字串联的使用是不正确的:字符串文字(和一般的C字符串)不能使用连接+
.相反,字符串文字可以简单地通过将它们彼此相邻放置来连接.例如,
TARGET_DIRECTORY "..\\..\\abc.osg"
Run Code Online (Sandbox Code Playgroud)