CMake构建学习笔记28-gmp&mpfr库的构建
1. 引言gmp 是一个用于任意精度整数、有理数和浮点数运算的高效C语言库;mpfr 构建在 gmp 之上,专注于正确舍入的任意精度浮点运算。这两个库都是非常底层的库,通常一起使用。
2. 构建
使用本系列文章(《CMake构建学习笔记-目录》)实现的自动化工具 BuildCppDependency 来进行构建 gmp 和 mpfr。以 gmp 为例,在 Windows 平台下输入指令:
./BuildCppDependency.ps1 `
-Generator "Visual Studio 16 2019" `
-InstallDir "$env:GISBasic" `
-SymbolDir "$env:GISBasic/symbols" `
-Install gmp在 Linux (Ubuntu) 平台下输入指令:
./build.sh -install gmp -installdir "$GISBasic"虽然可以直接使用工具,但是还是说一下构建的细节。在 Windows 平台下,想用 MSVC 来构建 gmp 和 mpfr 还是挺困难的,因为 gmp 和 mpfr 是 GNU 项目,只提供 Linux 下的构建方式。要组织成 CMake 项目需要对项目本身有一定的了解,所以笔者这里也不硬搞了,直接使用了 vcpkg 的预编译包,指令的实现其实就是将这个预编译包解压安装。
不过在 Linux/Ubuntu 下就可以自己编写脚本,使用 Autotools + GCC + Make 工具链来进行构建了。gmp的构建脚本如下:
#!/bin/bash# ===========================================# gmp.sh - 构建 GMP 库 # 接收参数:# -installdir # 安装目录(必须)# -force # 强制重新构建# -noclean # 不清理临时文件# ===========================================set -e# 遇到错误立即退出# 默认值InstallDir=""FORCE=falseNOClean=false# 解析可选参数while [[ $# -gt 0 ]]; docase $1 in -installdir) InstallDir="$2" shift 2 ;; -force) FORCE=true shift ;; -noclean) NOClean=true shift ;; --) # 分隔符,后面是项目参数 shift break ;; -*) echo "未知参数: $1" exit 1 ;; *) break# 非选项参数开始,停止解析 ;;esacdone# 检查必要参数if [[ -z "$InstallDir" ]]; thenecho "❌ 错误: 必须指定 -installdir "exit 1fi# 项目配置InstallDir=$(realpath "$InstallDir")ScriptDir=$(pwd)SourceBaseDir=$(realpath "../Source") # 绝对路径Name="gmp-6.3.0"SourceZipFile="${SourceBaseDir}/${Name}.tar.xz"ExtractedSourceDir="${SourceBaseDir}/${Name}"BuildDir="${ScriptDir}/build-${Name}" # 明确区分 build 目录TargetFile="${InstallDir}/include/gmp.h"# 检查源码包是否存在if [[ ! -f "$SourceZipFile" ]]; thenecho "❌ 源码包未找到: $SourceZipFile"exit 1fi# 如果没有 -force 且目标文件已存在,跳过构建if [[ "$FORCE" == false && -f "$TargetFile" ]]; then echo "✅ GMP 已安装: $TargetFile,跳过构建(使用 -force 可强制重建)" exit 0fiif [[ "$FORCE" == true ]]; then echo "⚠️启用 -force 模式,将重新构建 GMP" # 清理旧的构建目录(如果存在) rm -rf "$BuildDir"fiecho "
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]