Embarcadero C ++ Builder:传递项目依赖项并包括?

时间:2015-06-10 14:59:01

标签: c++ dll c++builder dynamic-loading c++builder-xe8

假设我有这样的项目依赖项:

  • SerialPortDemo(EXE) - > SerialPort(DLL) - > ByteIo(DLL)。
  • XYZ-App(EXE) - > XYZ-Lib(DLL) - > ByteIo(DLL)

每个DLL项目都有两个文件夹For i = 1 To wsD.Range("C" & wsD.Rows.Count).End(xlUp).Row For k = 1 To wsC.Range("C" & wsC.Rows.Count).End(xlUp).Row If (InStr(wsC.Cells(k,3).Value, wsD.Cells(i,2).Value)>0 Then 'you can assign the value to the Cell in Column C: wsC.Cells(k,3) wsC.Cells(k,4) = wsD.Cells(i,2) End If Next k Next i includesrc包含公共接口标头和include实现以及非公共标头。

习惯于使用PUBLIC,PRIVATE和INTERFACE关键字对CMake的target_include_directories,我想告诉ByteIo项目是否以及哪个目录的消费者必须添加到他们自己的包含目录列表才能使用ByteIo项目。这同样适用于链接库 - 再次,就像CMake中的target_link_libraries一样。

现在我被迫根据ByteIo的标题直接或间接地手动将ByteIo的include目录添加到每个项目中。例如,SerialPort.dll项目中的类SerialPort是ByteIo.ddl项目中定义的ByteIo的子类,因此项目SerialPortDemo.exe必须添加两个项目的(公共)包含路径,ByteIo和SerialPort。 即使是上面的小例子(SerialPortDemo,SerialPort,XYZ-App和XYZ-Lib),这也是一个巨大的浪费时间并且容易出错。

不起作用:

  • 选项集:太受限制,因为相对包含路径需要根据DLL项目的使用者项目的位置进行更改。到目前为止我唯一可以解决的方法是在选项集中添加包含路径列表的完整路径 - 这是不可接受的。
  • 环境变量:不是一个可接受的解决方案,因为它迫使我在一个非常具体的位置检查项目和/或否认我可以在同一台机器上多次检出项目。

Embarcadero C ++ Builder XE8是否为这个问题提供了一个理智,可维护的解决方案?

1 个答案:

答案 0 :(得分:0)

  

现在我被迫直接或间接地手动将ByteIo的include目录添加到每个项目,具体取决于ByteIo。

您只需要为直接依赖于ByteIo(SerialPort和XYZ-Lib)的项目添加它。其他项目(SerialPortDemo和XYZ-App)没有理由对ByteIo有任何引用。

  

Embarcadero C ++ Builder XE8是否提供问题解决方案?

我想到的一件事是创建一个Option Set,其中包含您的共享设置,例如ByteIo文件夹的路径,并将其保存到.optset文件中。然后,您可以根据需要将该选项集应用于每个项目。您可以将.optset文件直接导入项目,覆盖其当前配置。或者,您可以创建对.optset文件的引用,以便多个项目可以共享它。

如果这不起作用,您始终可以创建一个自定义Environment Variable,将其指向ByteIO的include文件夹,然后将该变量添加到每个项目的包含路径中。