VS 2005 почему-то считает, что любой проект типа "приложение" или "DLL"
обязательно должен линковаться к стандартным DLL, и принудительно добавляет в
такой проект свой стандартный Property Sheet "Core Windows Libraries". А
поведение поле Property Sheet'ов типа "список значений" таково, что поля более
"отдаленных" sheet'ов никак невозможно экранировать более "близкими". Для
прочих типов полей это работает нормально.
И получается, что, запрещая наследование в своих sheet'ах, я не могу
предотвратить наследование этих библиотек из стандартного sheet'а VS.
Единственный выход - явно прописывать нужные мне библиотеки в свойствах
конфигурации, а это криво, ибо конфигураций минимум четыре (Debug/Release,
Win32/x64).
Можно ли как-нибудь запретить наследование, не трогая свойств конкретной
конфигурации? Манипуляции со стандартными свойствами VS не годятся - проекты
должны нормально работать и на других машинах, с нетронутой студией.
Всего доброго!
Евгений Музыченко
eu-...@muzy-chen-ko.net (минусы убрать)
#pragma comment(lib,"имя_либы.lib")
тебя не устроит? Или его в 2005-й студии сломали?
02 Jul 07 15:08, you wrote to me:
AA> #pragma comment(lib,"имя_либы.lib")
AA> тебя не устроит?
Hи в коем случае. Эта прагма _добавляет_ библиотеку в список используемых, а
мне нужно _запретить_ автоматическое добавление в этот список стандартного
списка Core Windows Libraries.
#pragma comment(linker,"/nodefaultlib")
тоже не поможет?
02 Jul 07 19:44, you wrote to me:
AA> #pragma comment(linker,"/nodefaultlib")
AA> тоже не поможет?
Эта, как раз, помогает. Hо приходится в каждой конфигурации (их минимум четыре)
прописывать весь набор библиотек. А мне хочется обойтись набором property
sheet'ов, вставляя их в нужном порядке в каждую конфигурацию, и меняя параметры
только в самих sheet'ах. Для большинства параметров это отлично работает, а для
параметров типа "список значений" - не работает :(
Тут нужен совет человека, хорошо знающего VS 2005 - манипуляции с прагмами не
помогут :)
02 Jul 07 22:36, you wrote to me:
AA> Почему нельзя в коде сначала прагмой отключить все
AA> стандартные библиотеки, потом в коде прагмами задать все нужные
AA> библиотеки, а в конфигурацию вообще не лазить, ни в одну из четырех?
Как ты себе это представляешь? Во-первых, стандартные библиотеки студия
подставляет явно, в командную строку линкеру, поэтому /nodefaultlib на них не
подействует. Во-вторых, если в конфигурациях просто поставить $(NOINHERIT) и
использовать прагмы comment/lib - это будут записи типа "default library", на
которые /nodefaultlib как раз подействует.
EM> Единственный выход - явно прописывать нужные мне библиотеки в свойствах
EM> конфигурации, а это криво, ибо конфигураций минимум четыре
EM> (Debug/Release, Win32/x64).
--
Если этот проект будет жить относительно долгое время, то можно попытаться
написать add-in dll (или макрос), который и будет делать необходимые изменения
в конфигурациях проекта, используя COM-интерфейс внутренних объектов студии.
Эти изменения можно делать, например, непосредственно перед началом build'a;
информацию о нужных изменениях можно сохранить в объекте Globals для
конкретного Project (или Solution), чтобы она не терялась от сессии к сессии и
могла бы переноситься на другие компьютеры. Установка add-in елемента
достаточно проста и может быть легко автоматизирована.
Внутрення архитектура студии описана, например, в книгах "Inside Microsoft
Visual Studio .NET 2003" By Brian Johnson, Craig Skibo; "Developing
applications with visual studio net" by Jeffrey Cogswell.
Еще раз подчеркну, что это имеет смысл затевать, если проект "долгоживущий".
С уважением,
Геннадий Майко.
С уважением,
Геннадий Майко.
03 Jul 07 09:43, you wrote to me:
GM> Еще раз подчеркну, что это имеет смысл затевать, если проект
GM> "долгоживущий".
Да ну, этого всяко нет смысла затевать :) Было бы в проекте несколько десятков
конфигураций - тогда еще можно было бы... Мне просто хотелось изящного решения,
а с инструментами MS такие получаются редко :)
Да, ты прав.
Тогда есть еще один вариант:
#pragma comment(linker,"/nodefaultlib:ненужная_либа1")
#pragma comment(linker,"/nodefaultlib:ненужная_либа2")
05 Jul 07 12:00, you wrote to me:
AA> Тогда есть еще один вариант:
AA> #pragma comment(linker,"/nodefaultlib:ненужная_либа1")
AA> #pragma comment(linker,"/nodefaultlib:ненужная_либа2")
Hету вариантов. Hе подействует этот ключ на бибиотеку, подаваемую в
_командной_строке_.