Условные обозначения в файлах проекта Visual Studio 2010

В файле проекта Visual Studio 2010 С++ можно ли использовать условные выражения для определения наличия библиотеки и соответствующего изменения флагов препроцессора и т. д.?

Чтобы быть более конкретным, скажем, у нас есть каталог C:\libraries\MKL, я хотел бы #define MKL и добавить mkl_dll.lib в качестве дополнительной зависимости, если этот каталог существует.

Ранее для этого мы использовали несколько конфигураций решения, но это довольно сложно поддерживать.


person ngoozeff    schedule 29.07.2010    source источник


Ответы (1)


Следующее при вставке в конец проекта F# дает предполагаемый эффект (если c:\temp\foo.txt существует, то добавляется #define вместо THE_FILE_EXISTS). Я ожидаю, что для проекта C++ потребуются лишь незначительные изменения, поскольку они оба используют MSBuild. Возможно, это немного взломано, это первое, что у меня получилось.

<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>

вероятно, достаточно, но не так сексуально.

person Brian    schedule 29.07.2010
comment
Спасибо за это. В конце концов, я не смог заставить первую версию работать, но вторая работает отлично. - person ngoozeff; 29.07.2010