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 중국어 웹사이트의 기타 관련 기사를 참조하세요!