Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengurus Kebergantungan dengan Berkesan dalam CMake: Panduan untuk Ketergantungan Tempatan, Sasaran Perpustakaan dan Struktur Projek?

Bagaimana untuk Mengurus Kebergantungan dengan Berkesan dalam CMake: Panduan untuk Ketergantungan Tempatan, Sasaran Perpustakaan dan Struktur Projek?

Barbara Streisand
Barbara Streisandasal
2024-11-05 05:26:02584semak imbas

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

Pengurusan Ketergantungan dalam CMake: Source, Library dan CMakeLists.txt

Dalam CMake, menguruskan kebergantungan antara fail sumber, perpustakaan dan CMakeLists .txt memastikan projek yang tersusun dengan baik dan cekap. Artikel ini meneroka strategi untuk mengendalikan kebergantungan secara berkesan dalam projek kompleks yang melibatkan berbilang perpustakaan dan boleh laku.

Ketergantungan Tempatan: Satu Kelebihan

Menyediakan kebergantungan setempat memudahkan pengurusan kebergantungan dengan menentukan kebergantungan pada peringkat sumber dan pautan dalam setiap subdirektori CMakeLists.txt. Pendekatan ini menyediakan hierarki yang jelas dan mengelakkan kembung perut yang tidak perlu dengan mengecualikan kebergantungan yang tidak berkaitan.

Contoh Struktur Projek dan CMakeLists.txt

Pertimbangkan projek dengan perpustakaan yang saling berkaitan dan boleh dilaksanakan:

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

Library 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)

Graf Ketergantungan Perpustakaan

Graf kebergantungan untuk projek ini: App1 -> LibA -> LibC -> LibB App1 -> LibB

Strategi untuk Menguruskan Berbilang Kebergantungan

Beberapa pendekatan wujud untuk mengurus berbilang kebergantungan:

  1. Bina Perpustakaan dalam Projek Yang Sama :
    Pendekatan ini menyatukan perpustakaan dan yang boleh dilaksanakan dalam projek yang sama, memudahkan penyelesaian pergantungan.
  2. Bina Perpustakaan dalam Projek Berasingan:
    Untuk perpustakaan statik, jarang diubah suai , strategi ini mungkin lebih diutamakan untuk mengelakkan projek utama berantakan.

Amalan Terbaik

  • Buat sasaran perpustakaan berciri penuh yang termasuk pengepala dan perpustakaan laluan.
  • Gunakan pengubah suai AWAM/SWASTA dalam target_link_libraries untuk mengawal keterlihatan kemasukan pengepala.
  • Gunakan perintah find_package untuk mengurus kebergantungan dengan perpustakaan luaran yang telah dibina.

Atas ialah kandungan terperinci Bagaimana untuk Mengurus Kebergantungan dengan Berkesan dalam CMake: Panduan untuk Ketergantungan Tempatan, Sasaran Perpustakaan dan Struktur Projek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn