> 백엔드 개발 > C++ > CMake를 사용하여 여러 정적 라이브러리를 단일 라이브러리로 결합하려면 어떻게 해야 합니까?

CMake를 사용하여 여러 정적 라이브러리를 단일 라이브러리로 결합하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-12-07 00:20:10
원래의
245명이 탐색했습니다.

How Can I Combine Multiple Static Libraries into a Single Library Using CMake?

CMake를 사용하여 여러 정적 라이브러리를 단일 라이브러리로 결합

여러 정적 라이브러리에 의존하는 프로젝트를 빌드하는 경우 병합하는 것이 바람직할 수 있습니다. 이러한 라이브러리는 릴리스를 위해 단일 단위로 통합됩니다. CMake에는 target_link_libraries()와 같이 대상 라이브러리를 직접 결합하는 특정 방법이 있지만 모든 경우에 원하는 작업을 수행하지 못할 수도 있습니다.

사용자 정의 대상 접근 방식

한 가지 접근 방식은 정적 라이브러리를 직접 조작하는 사용자 정의 대상을 만드는 것입니다. ar 또는 libtool과 같은 명령을 실행하면 개별 라이브러리에서 개체 파일을 추출한 다음 이를 단일 아카이브로 다시 결합할 수 있습니다. 이는 다음 CMake 코드를 통해 달성할 수 있습니다.

# Add the individual static libraries
add_library(a a.cpp a.h)
add_library(b b.cpp b.h)

# Create the combined library target
set(C_LIB ${CMAKE_BINARY_DIR}/libcombi.a)
add_custom_target(combined
    COMMAND ar -x $<TARGET_FILE:a>
    COMMAND ar -x $<TARGET_FILE:b>
    COMMAND ar -qcs ${C_LIB} *.o
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    DEPENDS a b
)

# Import the combined library
add_library(c STATIC IMPORTED GLOBAL)
add_dependencies(c combined)
set_target_properties(c
    PROPERTIES
    IMPORTED_LOCATION ${C_LIB}
)

# Link the combined library to the executable
target_link_libraries(main c)
로그인 후 복사

이 방법은 개별 라이브러리의 개체 파일을 단일 아카이브로 효과적으로 집계하여 원하는 결합 라이브러리를 제공합니다.

대체 고려 사항

맞춤형 타겟 접근 방식으로 목표를 달성하는 동안 고려해야 할 대체 접근 방식이 있을 수 있습니다. CMake는 여러 라이브러리를 단일 출력으로 연결할 수 있는 link_libraries() 함수를 제공합니다. 또한 OBJECT 또는 INTERFACE 플래그와 함께 add_library() 함수를 사용하는 방법을 조사하면 해결책이 될 수 있습니다.

위 내용은 CMake를 사용하여 여러 정적 라이브러리를 단일 라이브러리로 결합하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿