CMake构建学习笔记22-libxml2库的构建

在上一篇文章《CMake构建学习笔记21-通用的CMake构建脚本》中,笔者封装了一个通用的cmake构建脚本cmake-build.ps1,那么这里笔者就尝试通过这个脚本来构建libxml2库。

libxml2是GNOME项目下的XML库,虽然比不上TinyXML-2轻量,但是胜在功能全面。这里就直接列出构建libxml2的脚本:

powershell 复制代码
param(    
    [string]$Name = "libxml2-v2.14.4",
    [string]$SourceDir = "../Source",
    [string]$Generator,
    [string]$InstallDir,  
    [string]$SymbolDir 
)

# 根据 $Name 动态构建路径
$zipFilePath = Join-Path -Path $SourceDir -ChildPath "$Name.zip"
$SourcePath = Join-Path -Path $SourceDir -ChildPath $Name
$BuildDir = Join-Path -Path "." -ChildPath $Name

# 解压ZIP文件到指定目录
if (!(Test-Path $SourcePath)) {
    Expand-Archive -LiteralPath $zipFilePath -DestinationPath $SourceDir -Force
}

# 检查目标文件是否存在,以判断是否安装
$DstFilePath = "$InstallDir/bin/libxml2.dll"
if (Test-Path $DstFilePath) {
    Write-Output "The current library has been installed."
    exit 1
} 

# 复制符号库
$PdbFiles = @(
    "$BuildDir/RelWithDebInfo/libxml2.pdb"
) 

# 额外构建参数
$CMakeCacheVariables = @{
    BUILD_SHARED_LIBS = "ON"
    LIBXML2_WITH_ZLIB = "ON"
    LIBXML2_WITH_ICONV = "ON"
    LIBXML2_WITH_HTTP = "ON"
}

# 调用通用构建脚本
. ./cmake-build.ps1 -SourceLocalPath $SourcePath `
    -BuildDir $BuildDir `
    -Generator $Generator `
    -InstallDir $InstallDir `
    -SymbolDir $SymbolDir `
    -PdbFiles $PdbFiles `
    -CMakeCacheVariables $CMakeCacheVariables `
    -MultiConfig $true 

这段脚本实现了解压源代码文件,判断是否已安装、复制符号库、额外构建参数。最后再执行cmake-build.ps1脚本。有的步骤如何不需要可以省略,不过额外构建参数还是需要关心一下,比如LIBXML2_WITH_ZLIB表示使用依赖库zlib参与构建(参看《CMake构建学习笔记2-zlib库的构建》);LIBXML2_WITH_ICONV,表示使用依赖库iconv参与构建(参看《CMake构建学习笔记20-iconv库的构建》)。

在PowerShell中使用如下指令进行构建:

powershell 复制代码
./libxml2.ps1 -Generator "Visual Studio 16 2019" `
-InstallDir "$env:eGova3rdParty" `
-SymbolDir "$env:eGova3rdParty/symbols" `

构建代码项目

相关推荐
Molesidy3 天前
【Embedded System】【CMake】Windows下CMake+VSCode的开发环境搭建以及初步认识
ide·vscode·编辑器·cmake
fedorayang8 天前
precompilation-headers 以及在cmake中的实现
cmake
AAA小肥杨10 天前
cmake使用教程
c语言·c++·cmake
辰尘_星启10 天前
『CMake』关于使用CMake构建项目时的现代/传统指令
c++·架构·系统·cmake·项目·构建
安全二次方security²12 天前
TF-A CMake构建系统
编译·cmake·atf·tf-a·arm安全架构·构建系统
玩转C语言和数据结构14 天前
CMake下载和安装图解(附安装包,适合新手)
cmake·cmake下载·cmake安装·cmake 下载·cmake 安装·安装cmake·cmake下载安装
周之鸥20 天前
Qt 项目国际化从零到一:用 Qt Linguist 实现多语言动态切换(含源码与踩坑指南)
qt·i18n·cmake·qmake·linguist·lupdate·lrelease
老黄编程23 天前
ros2 中 CMakeLists.txt 的 ament_package 有什么用?有什么使用约束?必须放置尾部吗?
ros·cmake
澄澈i23 天前
CMake学习篇[3]---CMake进阶+嵌套CMakeLists+多层级关系
c++·学习·cmake
一只小bit1 个月前
CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程
c语言·开发语言·c++·cmake