Избегайте слишком большого количества конфигураций для проекта Visual Studio - PullRequest
2 голосов
/ 24 марта 2009

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

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

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

Ответы [ 3 ]

1 голос
/ 29 марта 2009

Одним из подходов может быть условная ссылка на ваши библиотеки с использованием атрибута 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 голосов
/ 29 марта 2009

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

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

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

0 голосов
/ 24 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...