首頁 >後端開發 >C++ >如何有效管理 CMake 中的依賴關係:本地依賴關係、庫目標和專案結構指南?

如何有效管理 CMake 中的依賴關係:本地依賴關係、庫目標和專案結構指南?

Barbara Streisand
Barbara Streisand原創
2024-11-05 05:26:02584瀏覽

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

CMake 中的依賴關係管理:來源、庫和CMakeLists.txt

在CMake 中,管理來源檔案

本地依賴關係:優勢

設定本地依賴關係透過指定來簡化依賴關係管理每個子目錄的 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 -> LibA-> LibC-> LibB 應用程式1 -> LibB

管理多個相依性的策略

存在多種管理多個依賴項的方法:

    在同一專案中建立庫:
  1. 此方法將程式庫和可執行檔合併在同一專案中,從而促進依賴關係解析。
  2. 在單獨的專案中建立庫:
  3. 對於靜態的、不經常修改的庫,可能會首選此策略,以避免主項目混亂。
最佳實務

建立包含標頭和函式庫的全功能庫目標路徑。
  • 在 target_link_libraries 中使用 PUBLIC/PRIVATE 修飾符來控制標頭包含可見性。
  • 利用 find_package 指令來管理與外部預先建置庫的依賴關係。

以上是如何有效管理 CMake 中的依賴關係:本地依賴關係、庫目標和專案結構指南?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn