>백엔드 개발 >C++ >CMake에서 종속성을 효과적으로 관리하는 방법: 로컬 종속성, 라이브러리 대상 및 프로젝트 구조에 대한 가이드?

CMake에서 종속성을 효과적으로 관리하는 방법: 로컬 종속성, 라이브러리 대상 및 프로젝트 구조에 대한 가이드?

Barbara Streisand
Barbara Streisand원래의
2024-11-05 05:26:02582검색

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 -> LibA -> LibC -> LibB 앱1 -> LibB

다중 종속성 관리 전략

다중 종속성을 관리하기 위한 여러 접근 방식이 있습니다.

  1. 동일 프로젝트에서 라이브러리 구축 :
    이 접근 방식은 동일한 프로젝트 내의 라이브러리와 실행 파일을 통합하여 종속성 해결을 용이하게 합니다.
  2. 별도의 프로젝트에 라이브러리 구축:
    정적이며 자주 수정되지 않는 라이브러리의 경우 , 이 전략은 메인 프로젝트를 복잡하게 만드는 것을 피하기 위해 선호될 수 있습니다.

모범 사례

  • 헤더와 라이브러리를 포함하는 모든 기능을 갖춘 라이브러리 타겟 생성 paths.
  • target_link_libraries의 PUBLIC/PRIVATE 수정자를 사용하여 헤더 포함 가시성을 제어합니다.
  • find_package 명령을 활용하여 사전 구축된 외부 라이브러리로 종속성을 관리합니다.

위 내용은 CMake에서 종속성을 효과적으로 관리하는 방법: 로컬 종속성, 라이브러리 대상 및 프로젝트 구조에 대한 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.