Условия в файлах проекта Visual Studio 2010 - PullRequest
2 голосов
/ 29 июля 2010

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

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

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

1 Ответ

1 голос
/ 29 июля 2010

Следующее, при вставке в конец проекта 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>

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

...