Embarcadero C++Builder: переходные зависимости проекта и включает в себя?
Допустим, у меня есть такие зависимости проекта:
- SerialPortDemo (EXE) -> SerialPort (DLL) -> ByteIo (DLL).
- XYZ-App (EXE) -> XYZ-Lib (DLL) -> ByteIo (DLL)
Каждый проект DLL имеет две папки, include
а также src
, include
содержит заголовок (и) открытого интерфейса и src/
реализация наряду с непубличными заголовками.
Поскольку я использую CMake target_include_directories с его ключевыми словами PUBLIC, PRIVATE и INTERFACE, я хотел бы сообщить проекту ByteIo, нужно ли и какой каталог его потребители добавлять в свой собственный список включаемых каталогов, чтобы использовать проект ByteIo. То же самое относится и к связанным библиотекам - опять же, как target_link_libraries в CMake.
Прямо сейчас я вынужден вручную добавить директорию включения ByteIo в каждый проект, прямо или косвенно, в зависимости от заголовков ByteIo. Например, класс SerialPort в подклассах проекта SerialPort.dll ByteIo, определенный в проекте ByteIo.ddl, и, следовательно, проект SerialPortDemo.exe должен добавить (общедоступные) пути включения обоих проектов, ByteIo и SerialPort. Даже для крошечного примера выше (SerialPortDemo, SerialPort, XYZ-App и XYZ-Lib) это огромная трата времени и очень подвержена ошибкам.
Не работает:
- Наборы опций: слишком ограничен для использования, так как относительный путь включения должен изменяться в соответствии с расположением потребительского проекта DLL-проекта. Единственный обходной путь, который я мог найти, - это добавить полные пути в список включаемых путей в наборе параметров, что недопустимо.
- Переменные среды: не приемлемое решение, так как оно вынуждает меня проверять проекты в очень конкретном месте и / или лишает меня возможности проверять проект несколько раз на одном компьютере.
Предлагает ли Embarcadero C++Builder XE8 разумное и понятное решение этой проблемы?
1 ответ
Прямо сейчас я вынужден вручную добавить директорию включения ByteIo в каждый проект, прямо или косвенно, в зависимости от ByteIo.
Вам нужно добавить его только для проектов, которые напрямую зависят от ByteIo (SerialPort и XYZ-Lib). У других проектов (SerialPortDemo и XYZ-App) нет никаких оснований вообще ссылаться на ByteIo.
Embarcadero C++Builder XE8 предлагает решение проблемы?
Одна вещь, которая приходит на ум, - это создать набор опций, который содержит ваши общие настройки, такие как путь к папкам ByteIo, и сохранить его в .optset
файл. Затем вы можете применить этот набор параметров для каждого проекта по мере необходимости. Вы можете импортировать .optset
файл непосредственно в проект, перезаписывая его текущую конфигурацию. Или вы можете создать ссылку на .optset
файл, так что несколько проектов могут поделиться им.
Если это не сработает, вы всегда можете создать собственную переменную среды, которая указывает ее на папку включения ByteIO, а затем добавить эту переменную в путь включений каждого проекта.