CMake で依存関係を効果的に管理する方法: ローカル依存関係、ライブラリ ターゲット、およびプロジェクト構造に関するガイド

Barbara Streisand
リリース: 2024-11-05 05:26:02
オリジナル
575 人が閲覧しました

How to Effectively Manage Dependencies in CMake: A Guide to Local Dependencies, Library Targets, and Project Structure?

CMake の依存関係管理: ソース、ライブラリ、および CMakeLists.txt

CMake で、ソース ファイル、ライブラリ、および CMakeList 間の依存関係を管理する.txt により、適切に構造化された効率的なプロジェクトが保証されます。この記事では、複数のライブラリと実行可能ファイルを含む複雑なプロジェクトの依存関係を効果的に処理する戦略について説明します。

ローカルの依存関係: 利点

ローカルの依存関係を設定すると、以下を指定することで依存関係の管理が簡素化されます。各サブディレクトリの CMakeLists.txt 内のソース レベルとリンク レベルでの依存関係。このアプローチにより、明確な階層が提供され、無関係な依存関係を除外することで不必要な肥大化が回避されます。

サンプル プロジェクト構造と CMakeLists.txt

相互接続されたライブラリと実行可能ファイルを含むプロジェクトを考えてみましょう。

Lib
  - LibA
    - CMakeLists.txt
    - Src
      - a.cc
    - Inc
      - a.h
  - LibB
    - CMakeLists.txt
    - Src
      - b.cc
    - Inc
      - b.h
  - LibC
    - CMakeLists.txt
    - Src
      - c.cc
    - Inc
      - c.h

App1
  - CMakeLists.txt
  - Src
    - main.cc
ログイン後にコピー

ライブラリ CMakeLists.txt (LibA、LibB、LibC)

include_directories(Inc ../LibC/Inc)
add_subdirectory(../LibC LibC)
add_library(LibA Src/a.cc Inc/a.h)
target_link_libraries(LibA LibC)

include_directories(Inc)
add_library(LibB Src/b.cc Inc/b.h)

include_directories(Inc ../LibB/Inc)
add_subdirectory(../LibB LibB)
add_library(LibC Src/c.cc Inc/c.h)
target_link_libraries(LibC LibB)
ログイン後にコピー

App1 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(App1 CXX)

file(WRITE "Src/main.cc" "#include \"a.h\"\n#include \"b.h\"\nint main()\n{\na();\nb();\nreturn 0;\n}")
...
include_directories(../Lib/LibA/Inc ../Lib/LibB/Inc)
add_subdirectory(../Lib/LibA LibA)
add_subdirectory(../Lib/LibB LibB)
add_executable(App1 Src/main.cc)
target_link_libraries(App1 LibA LibB)
ログイン後にコピー

ライブラリ依存関係グラフ

このプロジェクトの依存関係グラフ: App1 ->リバ -> LibC -> LibB App1 -> LibB

複数の依存関係を管理するための戦略

複数の依存関係を管理するには、いくつかのアプローチが存在します。

  1. 同じプロジェクト内でライブラリを構築する:
    このアプローチでは、ライブラリと実行可能ファイルが同じプロジェクト内に統合され、依存関係の解決が容易になります。
  2. 個別のプロジェクトでライブラリをビルド:
    静的で頻繁に変更されないライブラリの場合メイン プロジェクトが乱雑になることを避けるために、この戦略が推奨される場合があります。

ベスト プラクティス

  • ヘッダーとライブラリを含むフル機能のライブラリ ターゲットを作成する
  • ヘッダーの組み込みの可視性を制御するには、target_link_libraries で PUBLIC/PRIVATE 修飾子を使用します。
  • find_package コマンドを使用して、事前に構築された外部ライブラリとの依存関係を管理します。

以上がCMake で依存関係を効果的に管理する方法: ローカル依存関係、ライブラリ ターゲット、およびプロジェクト構造に関するガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート