假设我有这样的项目依赖项:
- 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 项目。这同样适用于链接库 - 同样,就像CMake 中的target_link_libraries一样。
现在,我不得不根据 ByteIo 的标头直接或间接地将 ByteIo 的包含目录手动添加到每个项目中。例如,SerialPort.dll 项目中的 SerialPort 类继承了 ByteIo.ddl 项目中定义的 ByteIo,因此项目 SerialPortDemo.exe 必须添加两个项目 ByteIo 和 SerialPort 的(公共)包含路径。即使对于上面的小例子(SerialPortDemo、SerialPort、XYZ-App 和 XYZ-Lib),这也是一种巨大的时间浪费并且非常容易出错。
不工作:
- 选项集:太有限而无法使用,因为相对包含路径需要根据 DLL 项目的使用者项目的位置进行更改。到目前为止,我能想到的唯一解决方法是将完整路径添加到选项集中的包含路径列表中——这是不可接受的。
- 环境变量:不是一个可接受的解决方案,因为它迫使我在一个非常特定的位置检查项目和/或拒绝我在同一台机器上多次检查项目的可能性。
Embarcadero C++Builder XE8 是否为这个问题提供了一个理智的、可维护的解决方案?