Skip to main content
Version: 1.1.1

用例: 为自定义生成配置安装包

学习使用覆盖三元组在 Linux 上构建共享库。

在Linux上构建动态库

使用kmpkg,您可以为许多开箱即用的配置构建库。但是,目前不包括 Linux 和 Mac OS 上的共享库。

这并不意味着您不能使用 kmpkg 在这些平台上构建动态库!本文档将指导您使用“--overlay-triplets”创建自己的自定义三元组,以便在 Linux 上轻松构建动态库。

步骤 1:创建自定义三元组文件

为了节省时间,请复制现有的“x64-linux.cmake”三元组文件。

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

并修改“custom-triplets/x64-linux-dynamic.cmake”以匹配以下内容:

# ~/git/custom-triplets/x64-linux-dynamic.cmake
set(KMPKG_TARGET_ARCHITECTURE x64)
set(KMPKG_CRT_LINKAGE dynamic)
set(KMPKG_LIBRARY_LINKAGE dynamic) # This changed from static to dynamic

set(KMPKG_CMAKE_SYSTEM_NAME Linux)

第2步:使用--overlay-triplets构建动态库

使用“--overlay-triplets”选项将三元组包含在“custom-triplets”目录中。

~/git$ kmpkg/kmpkg 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/kmpkg/downloads/sqlite-amalgamation-3280000.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/victor/git/kmpkg/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)

使用“kmpkg install”、“kmpkg update”、“kmpkg Upgrade”和“kmpkg remove”时,覆盖三元组可启用自定义三元组文件。

使用“--overlay-triplets”选项时,类似以下的消息会让您知道正在使用自定义三元组:

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

覆盖默认三元组

您可能已经注意到,Windows 的默认三元组(“x86-windows”和“x64-windows”)安装动态库,而静态库需要后缀(“-static”)。这与 Linux 和 Mac OS 不同,在 Linux 和 Mac OS 中,静态库是由 x64-linuxx64-osx 构建的。

使用 --overlay-triplets 可以覆盖默认的三元组以在 Linux 上完成相同的行为:

  • x64-linux:构建动态库,
  • x64-linux-static:构建静态库。

第 1 步:创建叠加三元组

使用上一示例中创建的自定义三元组,将custom-triplets/x64-linux-dynamic.cmake重命名为custom-triplets/x64-linux.cmake。然后, 将默认的x64-linux三元组(用于构建静态库)复制到custom-triplets文件夹中,并将其重命名为x64-linux-static.cmake

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

第 2 步:使用 --overlay-triplets 覆盖默认三元组

使用“--overlay-triplets”选项将三元组包含在“custom-triplets”目录中。

~/git$ kmpkg/kmpkg 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/kmpkg/downloads/sqlite-amalgamation-3280000.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/victor/git/kmpkg/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