Visual Studio 2015/17 - Visual C ++ Добавление ссылки на проект ссылается на целевую / выходную библиотеку вместо проекта - PullRequest
0 голосов
/ 14 февраля 2019

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

Что я пытаюсь сделать (упрощенная версия).У меня в основном 3 проекта A, B и C (файлы vcxproj) в разных местах.Затем я использую эти проекты в двух решениях, которые находятся в других местах (скажем, S1 и S2 и более подробно о предстоящей структуре ...).Чтобы все заработало, мне пришлось использовать много $ (ProjectDir) вместо $ (SolutionDir) для определения местоположения.Таким образом, я могу повторно использовать проекты в S1 и S2, убедившись, что если я сделаю $ (ProjectDir) .... \ для ссылки на что-либо (.h .lib или другие файлы), они будут в правильном расположении.Теперь, скажем, в S1 я импортировал A, B и C, где B и C зависят от A, поэтому я добавил ссылку в B и C в A. Пока все хорошо, но ...

Чтоидет не так 1) Если посмотреть на свойства ссылки на A в B (в S1), я вижу, что «Полный путь» указывает на файл библиотеки, созданный A, а не на файл A.vcxproj2) Хотя это случайно в одном S1 (когда я говорю правильно, я имею в виду, что оно указывает на что-то, что действительно производится и доступно), когда я добираюсь до S2, библиотека, поступающая из проекта A, указывает, что она находится в неправильном месте (все же я ожидал ссылаться на проект, а не на выходную lib)

Вопросы 1) Кто-нибудь знает, почему ссылка на проект имеет полный путь, указывающий на библиотеку?2) Даже если это правильно, потому что, когда вы добавляете зависимость, вы на самом деле говорите, что зависите от ее продукта, почему они указывают разный путь в двух разных решениях?Возможно, даже использования $ (ProjectDir) для создания путей в зависимости от проекта, а не решения недостаточно ...

Спасибо вам всем

1 Ответ

0 голосов
/ 15 февраля 2019

Если вы добавили ссылку через References -> Add Reference..., вы должны увидеть элемент ProjectReference в вашем файле .vcxproj.Как вы, вероятно, видите, атрибут Include ссылается на проект, а не на вывод.

Причина, по которой ваши пути отличаются между решениями, вероятно, заключается в том, что для Project Properties -> General -> Output Directory проекта A установлено значениеиспользуйте переменную $(SolutionDir), что подразумевает изменения Full Path, если решение S1 находится в другом каталоге, чем S2.

Вы можете изменить выходной каталог, чтобы он не зависел от $(SolutionDir),например, C:\Build\$(Configuration), чтобы иметь одинаковые Full Path для обоих решений при использовании одного и того же $(Configuration) (например, Debug).

Возможно, вам придется перезагрузить проекты, которые ссылаются на проект A, если вы изменитеOutput Directory проекта, чтобы увидеть обновленный Full Path.

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