다음을 통해 공유


오버레이 삼중자 사용

Linux에서 동적 라이브러리 빌드

vcpkg를 사용하면 대부분의 구성에 대한 라이브러리를 기본으로 빌드할 수 있습니다. 그러나 현재 Linux 및 Mac OS의 공유 라이브러리는 포함되지 않습니다.

그렇다고 해서 vcpkg를 사용하여 이러한 플랫폼에서 동적 라이브러리를 빌드할 수 없다는 의미는 아닙니다. 이 문서에서는 Linux에서 동적 라이브러리를 --overlay-triplets 쉽게 빌드할 수 있도록 사용자 지정 삼중자를 만드는 방법을 안내합니다.

1단계: 사용자 지정 삼중 파일 만들기

시간을 절약하려면 기존 x64-linux.cmake 삼중자 파일을 복사합니다.

~/git$ mkdir custom-triplets
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake

아래 내용과 일치하도록 수정 custom-triplets/x64-linux-dynamic.cmake 합니다.

# ~/git/custom-triplets/x64-linux-dynamic.cmake
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic) # This changed from static to dynamic

set(VCPKG_CMAKE_SYSTEM_NAME Linux)

2단계: 동적 라이브러리를 빌드하는 데 사용 --overlay-triplets

--overlay-triplets 이 옵션을 사용하여 디렉터리에 삼중자를 custom-triplets 포함합니다.

~/git$ vcpkg/vcpkg install sqlite3:x64-linux-dynamic --overlay-triplets=custom-triplets
The following packages will be built and installed:
    sqlite3[core]:x64-linux-dynamic
Starting package 1/1: sqlite3:x64-linux-dynamic
Building package sqlite3[core]:x64-linux-dynamic...
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux-dynamic.cmake
-- Downloading https://sqlite.org/2019/sqlite-amalgamation-3280000.zip...
-- Extracting source /home/victor/git/vcpkg/downloads/sqlite-amalgamation-3280000.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/victor/git/vcpkg/buildtrees/sqlite3/src/3280000-6a3ff7ce92
-- Configuring x64-linux-dynamic-dbg
-- Configuring x64-linux-dynamic-rel
-- Building x64-linux-dynamic-dbg
-- Building x64-linux-dynamic-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x64-linux-dynamic... done
Installing package sqlite3[core]:x64-linux-dynamic...
Installing package sqlite3[core]:x64-linux-dynamic... done
Elapsed time for package sqlite3:x64-linux-dynamic: 44.82 s

Total elapsed time: 44.82 s

The package sqlite3:x64-linux-dynamic provides CMake targets:

    find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)

오버레이 트리플렛을 사용하면 vcpkg install, vcpkg updatevcpkg upgradevcpkg remove.

--overlay-triplets 옵션을 사용하는 경우 다음과 같은 메시지를 통해 사용자 지정 삼중자가 사용되고 있음을 알 수 있습니다.

-- Loading triplet configuration from: /home/custom-triplets/x64-linux-dynamic.cmake

기본 삼중값 재정의

눈치채셨듯이 Windows용 기본 삼중자(x86-windowsx64-windows)는 동적 라이브러리를 설치하지만 정적 라이브러리에는 접미사(-static)가 필요합니다. 이는 정적 라이브러리가 빌드 x64-linux 되는 Linux 및 Mac OS와 x64-osx다릅니다.

--overlay-triplets Linux에서 동일한 동작을 수행하려면 기본 삼중자를 재정의할 수 있습니다.

  • x64-linux: 동적 라이브러리를 빌드합니다.
  • x64-linux-static: 정적 라이브러리를 빌드합니다.

1단계: 오버레이 트리플렛 만들기

이전 예제에서 만든 사용자 지정 삼중자를 사용하여 이름을 .로 custom-triplets/x64-linux.cmake바꿉니다custom-triplets/x64-linux-dynamic.cmake. 그런 다음 폴더에서 기본 x64-linux 삼중자(정적 라이브러리를 빌드)를 custom-triplets 복사하고 이름을 바꿉니다 x64-linux-static.cmake.

~/git$ mv custom-triplets/x64-linux-dynamic.cmake custom-triplets/x64-linux.cmake
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-static.cmake

2단계: 기본 삼중값을 재정의하는 데 사용 --overlay-triplets

--overlay-triplets 이 옵션을 사용하여 디렉터리에 삼중자를 custom-triplets 포함합니다.

~/git$ vcpkg/vcpkg install sqlite3:x64-linux --overlay-triplets=custom-triplets
The following packages will be built and installed:
    sqlite3[core]:x64-linux
Starting package 1/1: sqlite3:x64-linux
Building package sqlite3[core]:x64-linux...
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake
-- Downloading https://sqlite.org/2019/sqlite-amalgamation-3280000.zip...
-- Extracting source /home/victor/git/vcpkg/downloads/sqlite-amalgamation-3280000.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/victor/git/vcpkg/buildtrees/sqlite3/src/3280000-6a3ff7ce92
-- Configuring x64-linux-dbg
-- Configuring x64-linux-rel
-- Building x64-linux-dbg
-- Building x64-linux-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x64-linux... done
Installing package sqlite3[core]:x64-linux...
Installing package sqlite3[core]:x64-linux... done
Elapsed time for package sqlite3:x64-linux: 44.82 s

Total elapsed time: 44.82 s

The package sqlite3:x64-linux provides CMake targets:

    find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)

기본 트리플렛은 사용자 지정 트리플렛으로 마스킹됩니다.

-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake