在Visual Studio 2010 C ++项目文件中,是否可以使用条件来确定库的存在,并适当地更改预处理程序标志等?
更具体地说,我们有一个目录C:\libraries\MKL
,我想#define MKL
并添加mkl_dll.lib作为该目录存在的附加依赖项。
以前我们使用多种解决方案配置来实现这一目标,但这很难维护。
答案 0 :(得分:1)
以下内容粘贴到F#项目的底部时会产生建议的效果(如果存在c:\temp\foo.txt
,则会添加#define
THE_FILE_EXISTS
。我希望C ++项目只需要很小的修改,因为它们都使用MSBuild。这可能有点hacky,这是我工作的第一件事。
<UsingTask TaskName="SeeIfFileExists" TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Path ParameterType="System.String" Required="true" />
<ItExists ParameterType="System.Boolean" Output="true" />
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[
ItExists = System.IO.File.Exists(Path);
]]>
</Code>
</Task>
</UsingTask>
<Target Name="SeeIfFileExistsTarget" BeforeTargets="PrepareForBuild">
<SeeIfFileExists Path="c:\temp\foo.txt" >
<Output TaskParameter="ItExists" ItemName="TheFileExists" />
</SeeIfFileExists>
<PropertyGroup>
<DefineConstants Condition="'@(TheFileExists)'=='True'"
>$(DefineConstants);THE_FILE_EXISTS</DefineConstants>
</PropertyGroup>
</Target>
我刚刚想到
<PropertyGroup>
<DefineConstants Condition="Exists('c:\temp\foo.txt')"
>$(DefineConstants);THE_FILE_EXISTS</DefineConstants>
</PropertyGroup>
可能就足够了,但不是那么性感。