因为正在进行WEBP图像的学习,因此有必要对WEBP的官方实现——libwebp进行本地构建和编译,以方便对标准及代码的理解。
下面记录一下,在本地Windows电脑上,构建并编译libwebp的过程。
步骤一:下载源码
首先,获取 libwebp 的最新源码:
-
从官方Git仓库克隆:
git clone https://chromium.googlesource.com/webm/libwebp
-
或者从官方网站下载源码压缩包,然后解压。
步骤二:安装必要的工具和依赖
- 安装Cmake(用于构建)
- 安装MinGW(用于编译、链接、生成可执行文件)
- 安装Visual Studio(作为2的替代)
步骤三:编译libwebp
1. 打开“开发者命令提示符”
为了使用正确的编译器和工具集,建议使用 Visual Studio 提供的“开发者命令提示符”:
- 在开始菜单中找到 “Visual Studio 2019”(或您的版本)文件夹。
- 点击 “x64 本机工具命令提示符” 或 “x86 本机工具命令提示符”,取决于您要构建的目标平台(64 位或 32 位)。
2. 导航到 libwebp 源码目录
在这一步及往后的cmake操作中,建议在Visual Studio提供的开发者命令提示符中进行,可以确保所有cmake需要的环境已被配置,提供编译器和相关的构建工具。
(在开始菜单中找到**“Visual Studio 2019”**(或其他版本)文件夹;点击 “x64 本机工具命令提示符” 或 “x86 本机工具命令提示符”,取决于要构建的目标平台(64 位或 32 位)。)
在命令提示符中,使用 cd
命令导航到您的 libwebp 源码目录,例如:
cd C:\libwebp
3. 创建并进入构建目录
为了保持源码目录整洁,建议创建一个单独的构建目录:
mkdir build
cd build
4. 运行 CMake 配置
在构建目录中,运行以下命令来生成 Visual Studio 解决方案和项目文件:
cmake -G "Visual Studio 16 2019" -A x64 ^
-DWEBP_BUILD_CWEBP=ON ^
-DWEBP_BUILD_DWEBP=ON ^
-DWEBP_BUILD_WEBPMUX=ON ^
-DWEBP_BUILD_LIBWEBPMUX=ON ^
-DWEBP_BUILD_EXTRAS=ON ^
-DWEBP_BUILD_ANIM_UTILS=ON ^
..
说明:
-
-G "Visual Studio 16 2019"
指定生成器为 Visual Studio 2019。如果您使用的是其他版本,请调整为对应的版本:
- Visual Studio 2017:
"Visual Studio 15 2017"
- Visual Studio 2022:
"Visual Studio 17 2022"
- Visual Studio 2017:
-
-A x64
指定构建架构为 64 位。如果您需要构建 32 位版本,可以使用-A Win32
。 -
-DWEBP_BUILD_WEBPMUX=ON
:启用构建webpmux
工具。 -
-DWEBP_BUILD_LIBWEBPMUX=ON
:启用构建libwebpmux
库。 -
-DWEBP_BUILD_EXTRAS=ON
:构建额外的工具和示例,这可能包括您需要的依赖项。 -
-DWEBP_BUILD_ANIM_UTILS=ON
:构建动画相关的工具,例如gif2webp
。
注意: 在 Windows 命令提示符中,可以使用 ^
作为命令换行符,以提高可读性。
如果想生成 Release 版本,可以添加 -DCMAKE_BUILD_TYPE=Release
,不过对于 Visual Studio,这个参数通常被忽略,因为可以在生成过程中选择配置。
步骤四:生成解决方案
-
在构建目录中,找到生成的
libwebp.sln
文件,双击打开。 -
设置cwebp为启动项目,点击生成解决方案(此时执行了编译和链接的过程,也生成了可执行文件)。
-
右键cwebp设置命令参数,如:
-q 50 test.png -o out.webp
-
运行成功。
关于Cmake和Visual Studio生成解决方案
作为小白,最近对工程中的cmake以及编译等知识存在混淆,在此做一些梳理。
CMake的作用:
- CMake 主要的作用 是 生成构建系统,这意味着它根据
CMakeLists.txt
配置文件生成适合你系统和开发环境的构建文件(如Makefile
、.sln
文件、Ninja
构建文件等)。CMake 本身并不会执行编译和链接,它只是负责配置和生成这些构建文件。
编译和链接过程:
- 编译过程:编译是将源代码(如
.cpp
文件)转化为目标文件(如.obj
或.o
文件),这个过程是由 编译器(例如cl.exe
)来执行的。 - 链接过程:链接是将多个目标文件和库文件合并成一个最终的可执行文件或共享库文件。链接工作通常由 链接器(如
link.exe
)来完成。
CMake的工作流程:
- CMake 配置:
- 你运行
cmake
命令,CMake 会解析CMakeLists.txt
,然后生成相应的构建系统文件(例如,在 Windows 上生成一个.sln
文件)。
- 你运行
- CMake 不直接编译:
- 在执行
cmake
后,CMake 只是生成了构建系统的配置文件(如.sln
文件或Makefile
),并没有执行实际的编译操作。
- 在执行
- 编译和链接由构建工具(如
MSBuild
、make
或 Visual Studio)完成:- 生成
.sln
文件后,实际的编译和链接工作由构建工具完成。在 Visual Studio 中,构建工具是MSBuild
,它会根据.sln
文件中的信息,调用编译器(如cl.exe
)进行编译,然后调用链接器(如link.exe
)进行链接,最终生成可执行文件或库文件。
- 生成
CMake 生成 .sln 文件后与 Visual Studio 生成解决方案的区别:
- CMake 生成
.sln
文件:- CMake 是一个构建系统工具,它的作用是根据项目的配置(如
CMakeLists.txt
文件)生成特定的构建文件。在 Windows 上,CMake 生成的是 Visual Studio 所使用的.sln
文件。 - 当你在 CMake 中执行
cmake -G "Visual Studio 16 2019" .
后,CMake 会根据你的配置生成.sln
文件,并且其中包含了所有的项目和构建设置。 - 生成的
.sln
文件中已经包括了项目的源代码路径、依赖关系、编译选项等配置信息。你可以直接在 Visual Studio 中打开这个.sln
文件。
- CMake 是一个构建系统工具,它的作用是根据项目的配置(如
- Visual Studio 生成解决方案:
- 这是在你打开
.sln
文件之后,实际执行的构建操作。通过点击 生成解决方案,Visual Studio 会根据.sln
文件中的配置,开始构建所有项目并执行编译和链接。 - 这个操作是具体的编译步骤,它会生成目标文件、库文件或者可执行文件,而 CMake 生成的
.sln
文件本身并不执行这些操作。
- 这是在你打开