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

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

DDD
DDD원래의
2024-12-03 05:29:09468검색

How Can I Merge Multiple Static Libraries into One Using CMake?

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

여러 정적 라이브러리에 의존하는 프로젝트로 작업할 때 이러한 라이브러리를 하나의 응집력 있는 단위로 병합하는 것이 필수적입니다. CMake는 이러한 문제에 대한 강력한 솔루션을 제공하여 다운스트림 종속성 유지 관리가 필요하지 않습니다.

문제

target_link_libraries를 직접 사용하여 정적 라이브러리를 결합하려는 시도는 성공하지 못하는 경우가 많습니다. 그러나 결합된 라이브러리가 실행 파일에 대한 종속성으로 사용되면 CMake는 자동으로 라이브러리를 병합하는 것 같습니다.

해결책

원하는 결과를 얻기 위해 사용자 정의 대상을 사용할 수 있습니다.

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
        )

이 타겟은 개별 정적 라이브러리에서 객체 파일을 추출하여 새로운 정적 라이브러리로 결합합니다.

Variant Using libtool

원하는 경우 동일한 목적으로 libtool 유틸리티를 활용할 수 있습니다.

add_custom_target(combined
        COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b>
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS a b
        )

결론

보다 간단한 접근 방식이 있어야 하는 것처럼 보일 수도 있지만, 사용자 정의 대상은 정적 라이브러리를 하나로 효과적으로 결합합니다. 말할 필요도 없이 이 기술은 종속성 관리를 단순화하고 결합된 라이브러리를 다운스트림 소비자에게 원활하게 제공합니다.

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

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