例如:
据我所知,这里发生的是jcapimin.c的AdditionalIncludeDirectories元数据属性正在被设置,以便稍后可以使用编译器命令行中的%(AdditionalIncludeDirectories)宏来引用它,无论你在哪里想。
所以我不明白为什么当使用%(AdditionalIncludeDirectories)宏检索此信息时,检索到的信息需要将%(AdditionalIncludeDirectories)卡在其末尾
答案 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。