0

そのようなプロジェクトの依存関係があるとしましょう:

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

各 DLL プロジェクトには、2 つのフォルダーincludesrc. 非パブリック ヘッダーとともにinclude、パブリック インターフェイス ヘッダーと実装が含まれます。src/

PUBLIC、PRIVATE、および INTERFACE キーワードを使用した CMake のtarget_include_directoriesに慣れているので、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 は、この問題に対して健全で保守可能なソリューションを提供しますか?

4

1 に答える 1

0

現在、ByteIo に応じて、ByteIo のインクルード ディレクトリをすべてのプロジェクトに直接または間接的に手動で追加する必要があります。

ByteIo (SerialPort および XYZ-Lib) に直接依存するプロジェクトにのみ追加する必要があります。他のプロジェクト (SerialPortDemo および XYZ-App) が ByteIo を参照する理由はまったくありません。

Embarcadero C++Builder XE8 は問題の解決策を提供しますか?

頭に浮かぶことの 1 つは、ByteIo フォルダーへのパスなどの共有設定を含むオプション セット.optsetを作成し、それをファイルに保存することです。その後、必要に応じてそのオプション セットを各プロジェクトに適用できます。.optsetファイルをプロジェクトに直接インポートして、現在の構成を上書きできます。または、.optsetファイルへの参照を作成して、複数のプロジェクトで共有できるようにすることもできます。

それが機能しない場合は、いつでもByteIO のインクルード フォルダーを指すカスタム環境変数を作成し、その変数を各プロジェクトのインクルード パスに追加できます。

于 2015-06-12T07:05:19.483 に答える