CMake构建学习笔记3-libpng库的构建

news/2024/9/18 9:00:36/文章来源:https://www.cnblogs.com/charlee44/p/18377759

libpng是一个用于读取、写入 PNG (Portable Network Graphics) 文件格式的开源软件库,有了上一篇笔记作为基础,构建起来也非常简单。还是在源代码的根目录中创建一个build文件夹,执行如下关键指令:

# 配置CMake  
cmake .. -G "$Generator" -A x64 `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCMAKE_PREFIX_PATH="$InstallDir" `
-DCMAKE_INSTALL_PREFIX="$InstallDir" `
-DPNG_TESTS=OFF `
-DPNG_STATIC=OFF `# 构建阶段,指定构建类型
cmake --build . --config RelWithDebInfo# 安装阶段,指定构建类型和安装目标
cmake --build . --config RelWithDebInfo --target install
  1. $Generator在上篇笔记中说过是生成器,例如"Visual Studio 16 2019"。
  2. CMAKE_BUILD_TYPE是设置构建的类型,这里使用的是RelWithDebInfo,也就是Release带调试信息的类型。
  3. CMAKE_PREFIX_PATH是一个非常关键的CMake变量,用于指定CMake查找依赖项、库、包等的优先搜索路径。它可以是一个以分号分隔的目录列表,CMake在这些目录中查找外部依赖项,这里使用的是安装目录。libpng是需要依赖于zlib进行构建的,而在上一篇笔记中我们已经在这个目录中安装了zlib,那么只要将这个变量指定这个目录,CMake进行构建的时候就会自动找到zlib的依赖项,从而简化我们的配置过程。如下图所示:
    CMake变量和项目配置
  4. PNG_TESTS和PNG_STATIC是libpng提供的构建选项,将它们都设置成OFF,表示不用构建测试程序,也不同构建静态库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初学Java7

初步学习了容器的知识,大概了解了vector的使用,作为练习,完成了一个简陋的车站模拟系统

wsl损坏,WSLRegisterDistribution Failed with Error 0x8007019e

背景 之前由于关机中断还是什么原因,导致wsl不能用了,今天心血来潮想要用一下wsl,于是找办法修了一下。 过程 根据下面这个文章进行修复的。 https://thegeekpage.com/wslregisterdistribution-failed-with-error-0x8007019e/ 我执行了以下操作:关闭linux子系统,重启;开启…

C程序设计语言(第2版新版)练习题1-6

练习1-6 验证表达式getchar()!=EOF的值是0还是1。#include <stdio.h>int main(int argc, char *argv[]) {(void)argc;(void)argv;int c;printf("请输入:");printf("%d\n", (c = getchar()) != EOF);return 0; }运行结果: 输入1 输入ctrl-z

Jenkins报错

[808]There were errors checking the update sites: SSLHandshakeException: sun.secu解决方案 (1)插件管理页面提示:There were errors checking the update sites:IOException:Unable to tunnel through proxy.Proxy returins “HTTP/1.1 400”image (2)插件管理页面提…

字符串包含了不需要的双引号,导致读取成json文件失败?Python怎么批量修改?

大家好,我是Python进阶者。 一、前言 前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python数据处理的问题。问题如下: 大佬们 请教下这个问题,数据为下载的html文件,写法已经固定,解析成json文件会报错,这种字符串包含了不需要的双引号,导致读取成json文件…

快速排序时间复杂度

首先上结论:快速排序算法的时间复杂度是O(nlogn)。

IDEA更换背景图片

DEA如何更换背景图片 在IDEA编辑器中点击【Help】–》【Find Action…】快捷键为【CTRL+SHILF+A】。在打开的窗口内搜索【Set Background Image】并点击找到的选项。 选择浏览一张要更改成背景的图片,这里可以对背景的透明度,样式进行修改。修改完后点击【OK】按钮。 本文来…

【python教程】打包和发布自己的项目,让别人去pip

@目录1.环境搭建1.1 换源1.2 安装wheel1.3 安装twine1.4 注册PyPI账号2.编写setup.py2.1 项目文件树2.2 编写setup.py文件3.构建4.上传ERROR:The user XXX isnt allowed to upload to project 2024.1.19更新:1.环境搭建 1.1 换源在pip安装时使用-i参数,可以指定源。以下有许…

Go 互斥锁 Mutex 源码分析(二)

原创文章,欢迎转载,转载请注明出处,谢谢。0. 前言 在 Go 互斥锁 Mutex 源码分析(一) 一文中分析了互斥锁的结构和基本的抢占互斥锁的场景。在学习锁的过程中,看的不少文章是基于锁的状态解释的,个人经验来看,从锁的状态出发容易陷入细节,了解锁的状态转换过一段时间就忘…

REST framework:分页

REST framework提供了分页的支持 一、全局配置(不建议使用) 在配置文件中设置全局的分页方式:REST_FRAMEWORK = {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 10 # 每页数据量 }二、局部配置 在不同的视图中可以通过pagination_c…

052、Vue3+TypeScript基础,页面通讯之一个组件中多个v-model数据绑定

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue// 引入emitter用于全局事件总线 // import emitter from @/utils/emitterconst app = createApp(App);// App.vue的根元素id为app app.mou…

React 和 Vite 环境下 TailwindCSS 的配置指南

1. 安装tailwindcss npm install -D tailwindcss postcss autoprefixer2. 生成tailwindcss 配置文件 npx tailwind init -p3. tailwind.config.js 配置 /** @type {import(tailwindcss).Config} */ export default {content: ["./index.html","./src/**/*.{js,t…