2009-10-05 3 views
5

Я хотел бы иметь разные зависимости проекта в зависимости от того, какая конфигурация проекта я сейчас создаю.Как иметь различные зависимости проекта для каждой конфигурации проекта?

Например, я не хочу создавать и связывать SomeTestLib.vcproj в конфигурации Release, но я хотел бы построить и связать его с Debug.

Одно решение, что Сорта работает, является использование условной компиляции макросов:

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

Но в этом случае, отладчик и IntelliSense не работают для SomeTestLib.
Есть ли .sln или .vcproj хак, который я мог бы использовать?
Спасибо.

ответ

6

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

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

Однако, поскольку он просто вставляет выходную строку из проекта библиотеки в командную строку зависимого проекта, установка выходной строки на «" приведет к добавлению NOTHING в командную строку компоновщика на зависимые проекты!

Надеюсь, эта проблема будет исправлена ​​в Visual Studio в будущем. Я остаюсь оптимистом, потому что это моя любимая IDE, и меня всегда впечатляют поддерживаемые ею функции. Однако некоторые из потоков поддержки VS, которые я видел, говорят, что эта ошибка «по дизайну», поэтому, возможно, они не исправят ее. Тем не менее, это довольно легко сделать.

В любом случае, чтобы подвести итог:

  • Щелкните правой кнопкой мыши на библиотечный проект в обозревателе решений и нажмите кнопку «Свойства».
  • Переключитесь на пару «Конфигурация/Платформа», для которой не создан проект библиотеки.
  • Выберите «Свойства конфигурации -> Библиотекарь -> Общие».
  • Для «Выходного файла» введите «» (это открытые парсеры, пробел, закрытие parens).
  • Нажмите OK.

Обратите внимание, что это обходное решение даст вам ошибки, если вы создадите или очистите проект библиотеки с ограниченными возможностями. Если вы просто создадите свое решение, оно будет пропущено при отключенных конфигурациях, поэтому вы не получите ошибок.

Надеюсь, это поможет!

Daniel

+0

Спасибо, это здорово! Другое дело. Если зависимость, которую вы связываете, является DLL, вы также можете указать имя библиотеки импорта «», и она будет проигнорирована. Этот параметр находится в Linker-> Advanced-> Import Library. – k0dek0mmand0

0

В визуальной студии каждая конфигурация сборки содержит собственный список свойств для вашего проекта. Просто добавьте свой lib в любую конфигурацию сборки, которую вы хотите. Просто не добавляйте к «Все конфигурации»

+0

Я действительно спрашиваю о проекте, который является частью решения, а не внешней lib. Я знаю вариант, который вы предлагаете. То, что я хотел бы достичь, - отметить, что зависимость проекта неактивна в определенных конфигурациях решений. – k0dek0mmand0

0

Щелкните правой кнопкой мыши свое решение и выберите свойства. Решение страница свойств будет отображаться ..

В правой странице выберите Свойство конфигурации >>> Конфигурацию

Здесь вы можете выбрать конфигурацию сборки для отладки, версии и всего тип сборки, проверяя флажок помечен как компиляция.

+0

Если я правильно понимаю, снятие отметки с проекта здесь не позволит его построить. Но если этот неконтролируемый проект помечен как зависимая от проекта, компоновщик будет жаловаться (SomeTestLib.lib не может быть найден.) – k0dek0mmand0

+0

Нет, если он уже построен и сборка присутствует в том же каталоге. Поскольку, когда вы создали проект, все его зависимости, кроме тех, которые установлены в GAC, копируются в частную папку этой сборки. Однако, поскольку он зависит от другой сборки и внесение изменений в источник этой сборки, он сначала построит все зависимости. –

+0

ОК, но я даже не хочу создавать SomeTestLib в конфигурации Release, вот и все. :) – k0dek0mmand0

2

В зависимом проекте можно отключить свойство зависимостей библиотеки Linker/General/Link и поместить библиотеку в входы компоновщика в соответствующие конфигурации.

Это делает ссылки на проекты менее полезными, но работоспособными.

1

Установите тип конфигурации в утилите вместо приложения/библиотеки в свойствах проекта -> Общие ..

0

В главном проекте, перейдите к Конфигурация Свойства -> Linker -> Input, в в разделе «Игнорировать специфическую библиотеку» добавьте lib, который вы хотите присвоить, например: .lib. Сделайте это снова для другой конфигурации, за исключением игнорирования другой библиотеки lib/dll.

Наконец, если вы не хотите, чтобы каждое здание проекта для обеих конфигураций, щелкните правой кнопкой мыши Solution -> Project Dependencies -> [Выбрать проект главного/верхнего уровня] -> Снимите флажок с проекта, который вы не хотите строить/игнорируются.

Этот метод имеет то преимущество, что вы по-прежнему можете вручную создавать каждый проект, если это необходимо, но можете переключаться между конфигурациями и только строить/использовать lib/dll, которые вы хотите.

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