Подтвердить что ты не робот

В проектах Visual Studio можно настроить пользовательский макрос на несколько конфигураций/платформ?

Я недавно столкнулся с листами свойств в Visual Studio, которые предоставляют способ определить пользовательский $(MACRO) для проекта. Они не то, что я действительно хочу, но наиболее близки к VS на данный момент.

Однако под менеджером свойств (View → Other Windows → Property Manager) не представляется возможным отобразить раздел "Макросы пользователя" в редакторе конфигурации, если вы не редактируете конкретную конфигурацию/платформу комбо, как Debug | Win32.

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

При редактировании свойств проекта обычно вы можете выбрать "Все конфигурации" и/или "Все платформы", чтобы изменения были скопированы в подразделы. Это недоступно при редактировании листа свойств.

Есть ли способ установить значения в листе свойств для нескольких конфигураций/платформ сразу? Рассмотрим, например, что вы хотите установить макрос POSTGRES_INSTALL в %PROGRAMFILES%\PostgreSQL\9.3 для целей x64 и %PROGRAMFILES(x86)%\PostgreSQL\9.3 для целей x86, есть ли способ сделать это для нескольких целей (Debug, Release, SomeCustomTarget) в то же время время?

4b9b3361

Ответ 1

Как работают листы свойств

Листы свойств - это простые списки свойств. Записи не предназначены для каждой конфигурации или для каждой платформы.

Если вы добавите лист свойств на верхний уровень проекта, он добавится ко всем комбинациям конфигурации/платформы под ним, как если бы вы индивидуально добавили этот файл свойств в каждую конфигурацию самостоятельно.

Таким образом, все свойства отображаются во всех вариантах конфигурации/платформы.

Это означает, что вы также можете делать такие вещи, как один лист для всех ваших x86-конфигураций и другой лист для всех ваших x64-конфигураций, например. для путей сборки. Таким образом, все остальные ваши свойства в вашем коде могут просто использовать $(MYLIB_INCLUDE), не беспокоясь о том, будет ли это 32- или 64-разрядная сборка.

Вы можете с пользой объединить таблицы конфигурации/платформы и глобальные свойства, также лист свойств может ссылаться далее на список. (Заказ значителен, и они, кажется, читаются снизу вверх в соответствии с пользовательским интерфейсом).

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

Пример использования с кодом

В качестве примера, который вы можете скачать с pg_sysdatetime в github здесь, я создал три листа свойств:

  • pg_sysdatetime.props - это мастер-лист, который пользователи могут редактировать для изменения путей. Он определяет макросы PGBASEDIR_x86 и PGBASEDIR_x64 с путями к 32-разрядным и 64-разрядным установкам PostgreSQL в системе.

  • pg_sysdatetime_x86.props - это простая оболочка, которая определяет PGBASEDIR как $(PGBASEDIR_x86).

  • pg_sysdatetime_x64.props делает то же самое для $(PGBASEDIR_x64)

Я добавил pg_sysdatetime.props на верхний уровень проекта, поэтому он применим ко всем комбинациям конфигурации/платформы.

Затем я добавил sysdatetime_x86.props ко всем конфигурациям платформы x86 и sysdatetime_x64.props ко всем конфигурациям платформы x64.

Редактор свойств выглядит так:

VS Properties Manager

и я могу убедиться, что макросы правильно определены при редактировании свойства:

Properties page showing macros

Теперь я могу ссылаться на каталог PostgreSQL libdir, include и т.д. из любого места моего проекта с помощью простых макросов, например:

 $(PGBASEDIR)\lib

не заботясь о том, занимаюсь ли я 32-разрядной или 64-битной сборкой и т.д. Поэтому я могу просто отредактировать настройки для "всех конфигураций", "всех платформ" и знаю, что они будут работать на все, я не нужно индивидуально редактировать каждый.

Это почти похоже на использование Makefile с 1980 года;-)