В следующем подходе предполагается, что каждое .EXE / приложение (которое использует эту библиотеку) имеет свое собственное решение Visual Studio.
У вас есть контроль над библиотекой, верно?Шаги 1-3 внесут изменения в свой файл проекта, а шаг 4 добавляет файл к исходному коду библиотеки.
Установить свойства проекта> C / C ++> Дополнительно> Принудительное включение в mylibrary_solution_defines.h
.
Редактировать свойства проекта> C / C ++> Общие> Дополнительно Включить каталоги, чтобы поставить $(SolutionDir);
в начале списка каталогов.
Установите для обоих свойств проекта> Общие> Выходной каталог и Промежуточный каталог что-то относительно каталога решения.Возможно $(SolutionDir)$(ProjectName)\$(Configuration)
?Вы хотите убедиться, что библиотека перестраивается для каждого решения, которое ее использует;не должно быть общего доступа к файлам .lib или .obj.
Создайте пустой, фиктивный заголовочный файл с именем mylibrary_solution_defines.h
и поместите его в исходный код своей библиотеки, чтобы #include "mylibrary_solution_defines.h"
никогда не потерпит неудачу.
В каждом решении для приложения / EXE - при условии, что у вас есть разные решения для каждого приложения, использующего эту библиотеку, в противном случае весь этот план потерпит неудачу - создайте mylibrary_solution_defines.h
файл с вашими #defines.
Вы видите, что происходит?Каждый исходный файл библиотеки неявно #include
s "mylibrary_solution_defines.h"
, и он преимущественно получает этот файл из каталога решения.Так что этот файл может быть разным для каждого решения.Так что если вашему решению ConsoleModeInterfaceProgram.sln
нужна библиотека, построенная с #define TEXTONLY 1
, поместите эту строку в mylibrary_solution_defines.h
, которая находится в том же каталоге, что и ConsoleModeInterfaceProgram.sln
.