2009-03-23 2 views
2

В настоящее время я переношу большой проект Linux в Visual Studio. Проект зависит от ряда сторонних библиотек (Python, MPI и т. Д.), А также от нескольких внутренних. Но он также может быть построен без этих библиотек или только с несколькими из них. Поэтому я не хочу создавать другую конфигурацию для каждой возможной комбинации, например. «Параллельно с Python», «Parallel without Python» и т. Д. Слишком много комбинаций. Это ситуация, когда я могу использовать MSBuild?Избегайте слишком много конфигураций для проекта Visual Studio

Редактировать: Одна из возможностей, которую я рассматривал, - создать кучу файлов .vsprops, но это по сути то же самое, что создать кучу различных конфигураций.

Редактировать: Может быть, CMake больше того, что я ищу? Я бы хотел услышать от всех пользователей CMake ...

+0

Однажды я столкнулся с этой проблемой и закончил создание конфигураций. 12 debug, 12 релиз ... не * слишком * болезненный. Надеюсь, добавив комментарий, возникает вопрос – zildjohn01

ответ

0

Нет хорошего решения для этого, о котором я знаю. Кажется, что для IDE требуется конфигурация для каждого набора аргументов командной строки для этих инструментов. Поэтому, если требуется N разных наборов аргументов, так как это звучит так, как здесь, - потребуются N разных конфигураций. Вот как работает IDE.

Несчастливо, но редко выигрывает в борьбе с Visual Studio, поэтому я лично всегда предоставлял и создавал столько конфигураций, сколько необходимо. Это боль, и это неудобно, и да, IDE должна в идеале обеспечить некоторый лучший механизм управления комбинациями - но это выполнимо, почти, и на самом деле это не займет столько времени, чтобы настроить, как это кажется в то время ,

(Как я понимаю, .vsprops может отнять часть боли, позволяя легко распределять настройки конфигурации между конфигурациями. Таким образом, эти миниатюрные текстовые поля в VS используются только для настройки параметров, которые различаются между конфигурациями. . может сделать их еще стоит исследовать Это не то, что я использовал сам же, хотя, только открыл его недавно)

+0

Похоже, пока MSBuild не поддерживает проекты Visual C++ в VS 2010, это единственное решение. – user76293

0

Если вы щелкните правой кнопкой мыши по решению в Visual Studio и выберите Configuration Manager, вы можете создать цели сборки для каждой конфигурации.

Вы можете выбрать между этими объектами с помощью комбинированного окна на панели инструментов, если у вас есть настройки по умолчанию.

Эти цели также могут быть выбраны при использовании MSBuild так же, как вы можете выбирать между Release и Debug.

+0

Это не отвечает на мой вопрос. Я строю те же проекты, независимо от того, какие внешние библиотеки используются, например. если я хочу использовать Python, я не строю Python как часть моего проекта, я просто #define HAVE_PYTHON и включаю/связываю необходимые файлы. – user76293

1

Один подход может быть условно ссылаться на свои библиотеки, используя Condition атрибут каждого сборок . Ссылка элемент (Python, MPI и т. Д.).

Это может отделить ваши библиотеки от свойств конфигурации и платформы и позволить вам создавать их по умолчанию или условно с использованием свойств MSBuild.

Так что в вашем csproj:

<Reference Include="YourPythonLibrary" 
      Condition="$(BuildType) == '' Or $(BuildType) == 'TypeA'" /> 
<Reference Include="YourMpiLibrary" 
      Condition="$(BuildType) == 'TypeA' Or $(BuildType) == 'TypeB'" /> 

Это включает в себя Python по умолчанию и MPI, только если правильный тип сборки установлен. Не имеет значения, какая конфигурация или платформа установлена, и вы можете настроить логическую логику в соответствии с каждой библиотекой для каждого из ваших типов сборки.

MSBuild /p:BuildType=TypeA 
MSBuild /p:BuildType=TypeB 

Было бы хорошо, чтобы использовать некоторые формы операции побитового при условии, но я не уверен, что это возможно в MSBuild?

Примечание. Не имеет значения для элемента Reference, если он включен только в Content, этот подход все равно будет работать.

+0

Будет ли эта работа для проектов Visual C++? Я никогда раньше не использовал MSBuild, поэтому я не знаю никаких подробностей об этом ... – user76293

+0

О, я думал, вы говорили о проекте C#, извините! не знаю о C++, схема MSBuild совершенно другая, поэтому вам придется искать через http://msdn.microsoft.com/en-us/library/y4sy8216.aspx и посмотреть, есть ли у вас эквивалент атрибута «Условие» для вашего конкретного ссылочного типа. – si618

+0

Просто был быстрый взгляд, и атрибут «UseInBuild» является логическим элементом «AssemblyReference», заслуживающим внимания? – si618

Смежные вопросы