여러 정적 라이브러리에 의존하는 경우 프로젝트의 종속성을 유지하는 것이 어려울 수 있습니다. 프로세스를 간소화하려면 이러한 라이브러리를 단일 단위로 병합하는 것이 바람직합니다. CMake는 라이브러리 연결 기능을 제공하지만 정적 라이브러리를 직접 결합하는 기능은 부족합니다.
이 문제를 해결하려면 사용자 지정 대상을 사용하여 원하는 결과를 얻을 수 있습니다. ar 또는 libtool과 같은 명령을 활용하면 정적 라이브러리의 개별 개체 파일을 추출하여 새 아카이브에 병합할 수 있습니다. 예를 들어, 다음 코드 조각을 고려하십시오.
cmake_minimum_required(VERSION 2.8.7) add_library(b b.cpp b.h) add_library(a a.cpp a.h) add_executable(main main.cpp) 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 ) add_library(c STATIC IMPORTED GLOBAL) add_dependencies(c combined) set_target_properties(c PROPERTIES IMPORTED_LOCATION ${C_LIB} ) target_link_libraries(main c)
이 예에서 결합된 사용자 정의 대상은 필요한 명령을 실행하여 a 및 b 라이브러리에서 객체 파일을 추출한 다음 이를 다음이라는 새 아카이브에 병합합니다. libcombi.a. 이 결합된 라이브러리는 c 타겟을 사용하여 기본 실행 파일로 가져올 수 있습니다.
또는 Apple 개발 도구의 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 내에서 보다 기본적으로 구현하는 것이 유리할 것입니다. 이렇게 하면 프로세스가 더욱 간소화되고 맞춤 타겟이 필요하지 않게 됩니다.
위 내용은 CMake를 사용하여 여러 정적 라이브러리를 단일 라이브러리로 병합하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!