Msbuild 将文件包括到VS2017 c++;按条件工程
我正在尝试在VS2017中构建c/c++项目 [ 项目文件中有一些条件Msbuild 将文件包括到VS2017 c++;按条件工程,msbuild,visual-studio-2017,c-preprocessor,Msbuild,Visual Studio 2017,C Preprocessor,我正在尝试在VS2017中构建c/c++项目 [ 项目文件中有一些条件 <ClCompile Include="$(srcPath)odbcapi30.c" />\r <ClCompile Condition="'$(ANSI_VERSION)'=='no'" Include="$(srcPath)odbcapi30w.c" />\r <ClCompile Condition="'$(ANSI_VERSION)'=='no'" Include="$(srcPath)
<ClCompile Include="$(srcPath)odbcapi30.c" />\r
<ClCompile Condition="'$(ANSI_VERSION)'=='no'" Include="$(srcPath)odbcapi30w.c" />\r
<ClCompile Condition="'$(ANSI_VERSION)'=='no'" Include="$(srcPath)odbcapiw.c" />\r
\r
\r
\r
我创造了
Unicode调试/发布
ANSI调试/发布
构型
在projectproperties->c\c++->Preprocessor中,我为Unicode添加了ANSI_VERSION=no,为ANSI添加了ANSI_VERSION=yes
< P>但是,对于任何平台/配置,我都在解决方案资源管理器中看到这些文件,它们是由VS2017编译的。当条件为真时,如何将这些文件包含到Project中?< P>条件要求ANSIIX版本是MSBuw属性。这些与C++预处理器定义不同。(这些是编译文件时使用的输入,但MSBUILD在测试要编译的文件时不使用这些输入-严格地说,它由预处理器使用,但从MSBUILD的角度来看,它是编译步骤的一部分) 可以在项目文件中将ANSI_版本设置为MSBUILD属性:- 例如:-
<PropertyGroup>
<ANSI_VERSION>no</ANSI_VERSION>
<ANSI_VERSION Condition="'$(Configuration)' == 'ANSI_DEBUG'">yes</ANSI_VERSION>
<ANSI_VERSION Condition="'$(Configuration)' == 'ANSI_RELEASE'">yes</ANSI_VERSION>
</PropertyGroup>
不
对
对
上述ANSI_版本的默认值为no,当条件满足时覆盖为yes,但如果愿意,您也可以依次测试每个可能的配置
如果您愿意,还可以使用or将这些条件组合成单个条件
就我个人而言,我会使用true/false而不是yes/no。使用true-false,您可以将属性作为布尔值进行测试,而不是与字符串进行比较(虽然这可能也适用于yes/no,但我没有尝试过)
在回答问题时编辑:
以上有条件地将文件从生成中排除,将其从显示中排除有点不同,因为它需要UI重新分析项目以更新文件列表。您可能会发现,在项目中为这些文件创建筛选器更有效(即,在解决方案视图中右键单击project并使用Add->New Filter)。然后有条件地使用ExcludeFromBuild设置来控制实际编译它们的配置,而不是使CLCompile包含条件,例如:-
<ClCompile Include="SomeFile.cpp">
<ExcludedFromBuild Condition="'$(Configuration)'=='Debug'">true</ExcludedFromBuild>
</ClCompile>
真的
谢谢!我看到了重要的区别。通过这种方式,我可以按条件包含文件,而不会在VS explorer中看到它们?