为什么visual studio中的属性用宏来引用自己

时间:2016-04-15 02:27:06

标签: visual-studio msbuild

例如:

See image

据我所知,这里发生的是jcapimin.c的AdditionalIncludeDirectories元数据属性正在被设置,以便稍后可以使用编译器命令行中的%(AdditionalIncludeDirectories)宏来引用它,无论你在哪里想。

所以我不明白为什么当使用%(AdditionalIncludeDirectories)宏检索此信息时,检索到的信息需要将%(AdditionalIncludeDirectories)卡在其末尾

1 个答案:

答案 0 :(得分:1)

变量(属性,项,元数据......)的值不会在MsBuild中自动继承,而是在同一名称override的新声明中继承先前的值。因此,如果未附加%(AdditionalIncludeDirectories) AdditionalIncludeDirectories 的新值将只是 .... \ jpeg; .... \ jpeg \ simd 部分,编译器无法找到标准库标题等。

你展示的属性页面只是msbuild上的用户界面,如果你在文本编辑器中打开项目文件很容易检查,所以这里是MsBuild中发生的事实的虚构样本:

<!--Somewhere in the msbuild files with compiler options-->
<ItemGroup>
  <AdditionalIncludeDirectories Include="$(VCInstallPath)\include"/>
</ItemGroup>

上述文件中的代码最终包含在项目文件中,现在您要将目录添加到编译器的包含搜索路径中。假设你写了

<ItemGroup>
  <AdditionalIncludeDirectories Include="..\jpeg"/>
</ItemGroup>

然后 AdditionalIncludeDirectories 的新值只是 .. \ jpeg 。这就是我们使用

的原因
<ItemGroup>
  <AdditionalIncludeDirectories Include="..\jpeg;%(AdditionalIncludeDirectories)"/>
</ItemGroup>

而是将值扩展为 .. \ jpeg; $(VCInstallPath)\ include

无关评论:通常你不应该像每个文件一样声明包含目录;假设有第二个文件也需要jpeg包含路径,你必须重复自己并再次写同样的东西。在编程中重复自己几乎总是错误的。在项目级别声明包含路径将是一个良好的开端。如果您也不想在项目中重复相同的路径,请查看使用property sheets