1.小程序码生成器有哪些?小程序短链接生成器入口在哪?
2.通过 EmbededFileProvider 实现 Blazor 的动态静态文件访问
3.一个简单好用的活码二维码生成器——二维彩虹!
4.稳定的链接短链接生成器入口在哪?短链接在线生成器好用吗?
5.Cpp项目文件结构及使用CMake构建Build过程解析
6.å¦ä½ç¼è¯SQLite-How To Compile SQLite
小程序码生成器有哪些?小程序短链接生成器入口在哪?
实现小程序码转二维码的步骤如下:1. 在虾果中选择“小程序码转二维码”功能,并上传小程序码。生成2. 虾果会自动生成一个二维码,器源用户可以通过扫码访问小程序。码动虾果中的态链音乐播放特效 源码软件小程序短链接生成器网页入口在“主页”中,用户可以在“主页”中选择“短链接生成器”按钮,接生进入小程序短链接生成器网页入口。成器在小程序短链接生成器网页入口中,源码用用户可以输入要生成的动态短链接的网址,选择链接类型(如静态链接或动态链接),链接还可以设置链接的生成权重和有效期等参数。生成的器源短链接可以直接在网页中访问,方便快捷。码动虾果的态链小程序码转二维码和小程序短链接生成器功能,可以为用户提供便捷的引流服务,帮助用户将小程序链接到更广泛的场景中,提高小程序的曝光率和用户量。
通过 EmbededFileProvider 实现 Blazor 的静态文件访问
重构独立博客,是今年计划之一。这个基于 Hexo 的静态博客,从年开始搭建,陪伴博主走过毕业、求职和而立之年。尽管尝试过 Jekyll 和 Hugo 这样的静态博客生成器,但由于模板和插件等周边生态,这个想法一直被搁置。最近,突然涌现出通过 Blazor 重写博客的想法,尤其是它对 WebAssembly 的支持,以及类似 Vue 和 React 的组件化开发模式,在开发体验上有着同样不错的表现。因此,今天这篇博客就来聊聊在重写博客过程中的一点收获,即如何让 Blazor 访问本地的静态文件。
从内嵌资源说起。首先,我们要引入一个概念,永嘉沙头离岭下源码即内嵌资源。我们平时接触的更多的是本地文件系统或 FTP、对象存储等运行在远程服务器上的文件系统,这些都是非内嵌资源。内嵌资源主要指那些没有目录层级的文件资源,因为它会在编译时“嵌入”到动态链接库(DLL)中。一个典型的例子是 Swagger,它在.NET Core平台下的实现是 Swashbuckle.AspNetCore,它允许使用自定义的HTML页面。这里使用到了 GetManifestResourceStream() 方法,其实就是一个内嵌资源。
关于内嵌资源,我们有两种方式来定义它。这样,我们就完成了内嵌资源的定义。而定义内嵌资源,本质上还是为了在运行时期间去读取和使用,那么,自然而然地,我们不禁要问,该怎么读取这些内嵌资源呢?在 Assembly 类中,微软为我们提供了以下接口来处理内嵌资源:GetManifestResourceNames()、GetManifestResourceInfo() 和 GetManifestResourceStream()。为了方便大家理解,这里我们准备了一个简单的示例。
此时,我们会发现,内嵌资源都是使用类似 A.B.C.D 这样的形式来表示资源路径的,因为内嵌资源本身没有目录层级。现在,如果我们再回过头去看 Swagger 的示例,就不难理解为什么会有 CustomUIIndex.Swagger.index.html 这样一个奇怪的值,因为它对应着实际的物理文件路径,示例代码中输出的资源路径和实际的物理路径存在着对应关系。
OK,那么在了解了内嵌资源以后,接下来,强股跟踪 副图 源码我们需要关注的是 EmbededFileProvider。需要说明的是,在 ASP.NET Core 中,微软通过 IFileProvider 接口来解决文件读取问题,典型的使用场景有静态文件中间件、Razor 模板引擎以及 WWWRoot 目录定位等。通常情况下,我们使用 PhysicalFileProvider 更多一点,它和 EmbededFileProvider 一样,都实现了 IFileProvider 接口,所以 ASP.NET Core 可以从不同的来源访问文件信息。
显然,EmbededFileProvider 正是为了内嵌资源而生,它在内部使用到了 Assembly 类中和内嵌资源相关的接口。所以,除了上面的方式,我们还可以通过下面的方式来访问内嵌资源,需要注意的是,使用 EmbededFileProvider 需要引用 Microsoft.Extensions.FileProviders.Embedded,大家可以比较一下这两种方式的差异。
除此以外,IFileProvider 还有一个最重要的功能,即 Watch() 方法,它可以监听文件的变化,并返回一个 IChangeToken。有没有一种似曾相识燕归来的感觉?没错,博主曾经在《基于选项模式实现.NET Core的配置热更新》这篇文章中介绍过它,它是实现配置热更新的关键。事实上,FileConfigurationSource 这个类中有一个 Provider 属性,而它对应的类型恰好是 IFileProvider,这难道是巧合吗?不,仔细顺着这条线,我们大概就能明白微软的良苦用心,我们的配置文件自然是来自文件系统,而考虑到内嵌资源的存在,我们面对的h5视频源码vue文件系统其实是一个广义的文件系统,它可以是物理文件、内嵌文件、Glob、对象存储(OSS)等等。
好了,千呼万唤始出来,现在终于要讨论 Blazor 这个话题啦!众所周知,静态博客生成器里主要存在着两种配置,即站点配置和主题配置,Hexo 里甚至还支持从特定文件夹里加载自定义的数据。所以,对于静态博客而言,它需要有从外部加载数据这个特性。我们知道,Blazor 分为服务器和客户端两个版本,两者的区别主要在于 Razor 模板由谁来渲染,前者相当于服务端渲染(SSR) + SignalR,而后者则是基于 WebAssembly,它可以直接在浏览器中加载。显然,后者更接近我们静态博客生成器的想法。由于 Hexo 使用 Yaml 作为配置语言,所以,为了读取原来 Hexo 博客的配置,参考《实现自己的.NET Core配置Provider之Yaml》这篇博客实现了一个 YamlConfigurationProvider。
在使用的过程中,遇到的问题是,它无法识别配置文件的路径。原因很简单,经过编译的 Blazor 会被打包为 WebAssembly,而 WebAssembly 在前端加载以后,原来的目录层级早已荡然无存。此时,基于物理文件的 PhysicalFileProvider 将无法工作。解决方案其实大家都能想到,换一种 IFileProvider 的晴天授权站源码授权实现就好了啊!至此,奇妙的缘分产生了:
其实,官方文档中提到过,Blazor 的配置文件默认从 WWWRoot 下的 appsettings.json 加载,所以,对于像 JSON 这类静态文件,可以注入 HttpClient,以 API 的方式进行访问。例如,官方文档中推荐的加载配置文件的方式为:
而经过我们这样改造以后,我们还可以这样加载配置:
一旦这些配置注入到 IoC 容器里,我们就可以纵享无所不在的依赖注入,这里以某个组件为例:
同样地,对于组件内的数据,在大多数场景下,我们可以这样来处理,还是因为有无所不在的依赖注入:
这里可以给大家展示下尚在开发中的静态博客:
理论上任何文件都可以这样做,主要是考虑到配置这种信息,用依赖注入会更好一点,这样每一个组件都可以使用这些配置,而如果是以 API 的形式集成,以目前 Blazor 打包以后加载的效果来看,页面会有比较大的“空白期”。我更加疑惑的是,如果 Blazor 打包后的体积过大,那么浏览器自带的存储空间是否够用呢?一句话总结的话,Blazor 是一个写起来非常舒服的框架,可未来是否会像当年的 Silverlight 一样,这还要看大家对 WebAssembly 的接受程度,可谓是“路漫漫其修远兮”啊……
本文小结。这篇博客,是博主由一个个“闪念”而串联起来的脑洞,作为一个实验性质的尝试,希望通过 Blazor 的客户端模式(WebAssembly) 实现一个静态博客,而在这个过程中,需要解决 Blazor 读取本地文件的问题,由此,我们引入了这篇博客的主题之一,即 EmbededFileProvider。顺着这条线索,我们梳理了内嵌的文件资源、IFileProvider 接口、FileConfigurationProvider、FileConfigurationSource 等等一系列看起来毫无关联的概念。事实上,“冥冥之中自有天意”,这一切怎么会毫无关联呢?我们最终从文件系统看到了配置系统,聊到了 Blazor 中的配置问题,这里我们熟悉的依赖注入、配置系统都得以延续下来。其实,单单就解决这个问题而言,完全不值得专门写一篇博客,可从一个点辐射到整个面的这种感悟,在人生的成长中更显得弥足珍贵,希望我们每一个人都能多多跳脱出自己的视角,去努力的看一看这个丰富多彩的世界,在多样性与多元化中去寻找整体上的统一,这是作为技术人员的我,一生都想去探索的哲学。好了,以上就是这篇博客的全部内容啦,欢迎大家在评论中留下你的想法或者建议,谢谢大家!
一个简单好用的活码二维码生成器——二维彩虹!
动态二维码,又称为活码,其生成工具——二维彩虹,无需下载APP,直接在浏览器登录即可使用。在二维彩虹官网输入信息,点击生成即可制作出包含网址链接、PDF文件、电子名片、视频、、文本信息、音频等的动态二维码。
动态二维码在企业办公、营销活动、教育教学、出版图书等领域广泛应用,且支持个性化设计,包括颜色、样式等。动态二维码与静态二维码的区别主要体现在:静态二维码内容不可修改,不支持复杂内容生成,且不追踪扫描数据;而动态二维码则能随时更新内容、追踪扫描数据,并具备加密功能,为企业办公便利性提供了显著提升。
在二维彩虹上制作动态二维码的过程简单明了,从登录官网开始,选择动态二维码选项,输入内容,点击生成即可。此外,用户还可以对二维码进行美化设计,如添加品牌logo、调整颜色和边框等。动态二维码能实时采集扫码数据,形成品牌数据库,为数据分析提供支持,帮助企业更好地了解用户行为,调整市场策略。
二维彩虹不仅提供了动态二维码制作功能,也支持静态二维码的制作。静态二维码内容一经生成,便永久有效,不限扫描次数,完全免费,但无法更改内容,也无法追踪扫描数据,且不支持复杂内容生成。
二维彩虹二维码生成器支持制作收款二维码、资料下载二维码、语音讲解二维码、图文解说二维码、PPT二维码、PDF二维码、网页二维码、作品集二维码、视频二维码、APP下载二维码、电子名片二维码、问卷调查二维码、导航二维码、微信无限加人二维码、社交媒体二维码、名片二维码、WIFI二维码、文本二维码等。二维彩虹二维码生成器按码收费,无限扫码流量,上传文件空间总量无上限,且支持随时查看和更新二维码内容。
对于海外用户,QR Tiger提供专业二维码解决方案,支持PDF文件、网址链接、视频、文字、、音频等多样化内容生成二维码。此外,QR Tiger还提供定制服务,满足特殊需求。
稳定的短链接生成器入口在哪?短链接在线生成器好用吗?
虾果提供的短链接生成器入口非常稳定,可以直接在虾果官网的“短链接生成”按钮中进行访问。该按钮可以直接点击,让用户快速进入虾果的短链接生成页面,方便用户进行选择和生成。而关于短链接在线生成器的问题,虾果的短链接生成器并不是万能的,有些网站和博客的短链接是不被搜索引擎认可的,因此生成出来的短链接可能会无法排名或者无法被用户找到。但是,虾果的短链接生成器仍然具有一定的优势,因为它可以生成符合搜索引擎优化规则的短链接,同时也支持多种不同类型的链接生成,包括静态链接、动态链接、重定向链接等。最后,虾果的短链接生成器使用非常方便,用户只需要输入相关的信息,就可以快速生成自己的短链接,并且可以保存和分享。虾果的短链接生成器功能非常的强大,可以满足用户的各种需求,因此也备受用户的喜爱和使用。综上所述,虾果提供的短链接生成器入口非常稳定,并且可以生成符合搜索引擎优化规则的短链接,同时也支持多种不同类型的链接生成,使用非常方便。但是,用户仍然需要根据自己的需求选择适合自己的短链接生成工具,才能发挥该工具的最大价值。
Cpp项目文件结构及使用CMake构建Build过程解析
本文将介绍常见的cpp项目文件结构,并展示使用Cmake进行构建的全过程。
当cpp项目规模逐渐变大时,单一目录下存放所有文件必然显得杂乱难以管理。这些文件通常会包括如项目源代码(.cpp, .hpp), 第三方库(.h, .hpp, 动态链接库等),文档,以及各种中间文件。较为常见的一种文件组织方式如下:
其中src为项目主要代码所在文件夹,可以下属包含module 1, 2, 等各个子模块。
根据StackOverflow stackoverflow.com/quest...上的建议,尽量将源代码的.cpp 和 .hpp .h 放在一起,而不要单独设置一个include文件夹存放头文件。 另外,若无必要,尽可能避免使用include文件夹存放公共的头文件,如公用的数学库等。
关于源文件的命名,可以采用项目名后加功能名的方式,例如
这就是我们项目的主程序。
使用CMake的关键步骤是编写CMakeLists.txt。一个最基本的能用来build的CMakeLists.txt需要有以下内容:
这里为了设置g++编译器,我们使用了set(CMAKE_C_COMPILER, ) 和 set(CMAKE_CXX_COMPILER, ) 。这两行必须在project命令前。在set(EXECUTABLE_OUTPUT_PATH "${ PROJECT_SOURCE_DIR}/bin")中,设置最终生成的可执行文件在/bin目录。CMake保留了几个全局变量,如:${ PROJECT_SOURCE_DIR} 即为当前.txt文件所在的目录,一般为项目主目录。
参数及路径可以使用“”双引号也可以不使用,后者若有空格则会被识别成多个参数。
此时,完整的项目结构应该如下:
其中 ../ 为读取上一个目录的CMakeLists,-G选项为指定Generator。此时在build文件夹出现生成的项目
生成的项目内容取决于使用何种生成器。若使用Visual Studio则会生成.sln等文件。
构建命令为在当前目录(build/) 对目标进行构建。最终生成的可执行文件会出现在bin/目录:
运行MyStep.exe
运行成功就可以得到 Hello cpp的输出。
至此一个最小cpp项目构建完毕!之后的笔记会进一步加入
å¦ä½ç¼è¯SQLite-How To Compile SQLite
SQLiteæ¯ANSI-Cçæºä»£ç ãå¨ä½¿ç¨ä¹åå¿ é¡»è¦ç¼è¯ææºå¨ç ãè¿ç¯æç« æ¯ç¨äºåç§ç¼è¯SQLiteæ¹æ³çæåã
è¿ç¯æç« ä¸å å«ç¼è¯SQLiteçæ¯ä¸ªæ¥éª¤çåé¦ï¼é£æ ·å¯è½ä¼å°é¾å 为æ¯ç§å¼ååºæ¯é½ä¸åãæ以è¿ç¯æç« æè¿°åéè¿°äºç¼è¯Sqliteçååãå ¸åçç¼è¯å½ä»¤å·²ç»ä½ä¸ºä¾åæä¾äºï¼ä»¥ææåºç¨å¼åè è½å¤ä½¿ç¨è¿äºä¾åä½ä¸ºå®æä»ä»¬èªå·±å®å¶çç¼è¯è¿ç¨ççä¸ä¸ªæåãæ¢å¥è¯è¯´ï¼è¿ç¯æç« æä¾äºæ³æ³åè§è§£ï¼èä¸æ¯äº¤é¥åç解å³æ¹æ³ã
èåVSåç¬æºæ件
Sqliteæ¯ç±è¶ è¿ä¸ç¾ä¸ªcæºç æ件以åä¼å¤çç®å½ä¸çèæ¬æ建çãSqliteçå®ç°æ¯çº¯ç²¹çANSI-Cï¼ä½æ¯è®¸å¤Cè¯è¨æºä»£ç æ件æ¯ç±è¾ å©çCç¨åºçææè 转æ¢æ¥çï¼å¹¶ä¸AWKï¼SEDåTCLèæ¬ä¼èåå°å®æçsqliteåºä¸ã对Sqliteæ建éè¦çCç¨åºå转æ¢åå建Cè¯è¨æºç æ¯ä¸ä¸ªå¤æçè¿ç¨ã
为äºç®åè¿äºï¼sqliteä¹éè¿ä¸ä¸ªé¢æå çå并åçæºç æ件ï¼sqlite3.cãè¿ä¸ªå并æ件æ¯ä¸ä¸ªANSI-Cæºç å®ç°æ´ä¸ªSQLiteåºçå¯ä¸æ件ãå并åçæ件æ´å®¹æå¤çãææçä¸è¥¿é½å å«å¨è¿ä¸ä¸ªæ件éï¼æ以å¾å®¹æè¿å ¥ä¸ä¸ªæ´å¤§çCæè C++ç¨åºçæºç æ ãææç代ç çæå转æ¢æ¥éª¤é½å·²ç»å®ç°äºï¼å æ¤æ²¡æè¾ å©çCç¨åºéè¦å»é ç½®ååå¼ï¼ä¹æ²¡æèæ¬éè¦å»è¿è¡ã并ä¸ï¼å æ¤ææåé½å å«å¨ä¸ä¸ªç¿»è¯åå ï¼ç¼è¯å¨å¯ä»¥åæ´å¤é«çº§çä¼åä»èæå5%å°%çæ§è½ãå 为è¿äºåå ï¼èååçæºç æ件sqlite3.c对ææç¨åºæ¥è®²é½æ¯å¼å¾æ¨èçã
æ¨èææçåºç¨ç¨åºä½¿ç¨èåæ件ã
ç´æ¥ä»åç¬çæºç æ件ä¸æ建sqliteå½ç¶å¯ä»¥ï¼ä½æ¯å¹¶ä¸æ¨èã对ä¸äºç¹æ®çåºç¨ç¨åºï¼å¯è½éè¦ä¿®æ¹æ建ç¨åºå»å¤ç使ç¨é£äºä»ç½ç«ä¸ä¸è½½çé¢æ建çæºç æ件ä¸è½å®æçæ åµã对äºè¿äºæ åµï¼æ¨èæ建å使ç¨ä¸ä¸ªå®å¶è¿çå并æ件ãæ¢å¥è¯è¯´ï¼å³ä½¿ä¸ä¸ªå·¥ç¨éè¦ä»¥åç¬çæºç æ件æ建sqliteï¼ä»ç¶æ¨è使ç¨ä¸ä¸ªèååçæºç æ件ä½ä¸ºä¸ä¸ªä¸é´æ¥éª¤ã
ç¼è¯å½ä»¤è¡æ¥å£ï¼CLIï¼
æ建å½ä»¤è¡æ¥å£éè¦ä¸ä¸ªæºç æ件ï¼
sqlite3.c:Sqliteèåçæºç æ件
sqlite3.h:å¹é sqlite3.c以åå®ä¹sqliteçcè¯è¨æ¥å£ç头æ件
shell.c:å½ä»¤è¡æ¥å£ç¨åºæ¬èº«ãè¿ä¸ªcæºç æ件å å«ä¸ä¸ªmain()çä¾ç¨åæ¯è½®å¾ªç¯çç¨æ·è¾å ¥çæ示符并å°è¾å ¥ä¼ ç»sqliteæ°æ®åºå¼æç¨äºå¤çã
ææçä¸è¿°æºç çä¸ä¸ªæ件é½è¢«å å«å¨ä¸è½½é¡µé¢çamalgamation tarballä¸ã
为äºæ建CLIï¼ç®åçå°è¿ä¸ä¸ªæ件æ¾ç½®å¨ç¸åçç®å½ä¸ç¶åä¸èµ·ç¼è¯ä»ä»¬ãç¨MSVCï¼
cl shell.c sqlite3.c -Fesqlite3.exe
å¨unixç³»ç»ä¸ï¼æè å¨windowsä¸ç¨cygwinæè mingw+msysï¼å ¸åçå½ä»¤ä¼æäºåè¿æ ·ï¼
gcc shell.c sqlite3.c -lpthread -ldl
为äºSQLite线ç¨å®å ¨ï¼éè¦pthreadsåºãä½æ¯å 为CLIæ¯ä¸ä¸ªå线ç¨çï¼æ们å¯ä»¥æ示SQLiteæ建ä¸ä¸ªé线ç¨å®å ¨çåºå¹¶å æ¤æ¤ç»¿pthreadsåºï¼
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl
-ldlåºæ¯å¨æ¯æå¨æè£ è½½æ¶éè¦ï¼ä¾å¦sqlite3_load_extension() æ¥å£åload_extension()
SQL functionãå¦æè¿äºç¹æ§é½ä¸è¦æ±ï¼é£ä¹æ们ä¹å¯ä»¥ä½¿ç¨SQLITE_OMIT_LOAD_EXTENSIONç¼è¯æ¶é´é项忽ç¥ä»ä»¬ã
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c
æ人å¯è½æ³è¦æä¾å ¶ä»çç¼è¯æ¶é´é项(compile-time options)ï¼ä¾å¦SQLITE_ENABLE_FTS3å»å ¨ææ¬æç´¢æè SQLITE_ENABLE_RTREEç¨äºR*æ æç´¢å¼ææ©å±ãèæ人å°æ£å¸¸æå®ä¸äºç¼è¯ä¼åå¼å ³ãï¼é¢ç¼è¯çCLIå¯ä»¥ä»éæ©sqliteç½ç«ä¸ä½¿ç¨â-Osâä¸è½½ä¸æ¥ï¼ææ æ°ç§å¯è½çåæ°å¨è¿éã
å ³é®ç¹å¨è¿éï¼æ建CLIéè¦ç¼è¯ä¸èµ·ä¸¤ä¸ªCè¯è¨æ件ãshell.cæ件å å«å ¥å£çå®ä¹åç¨æ·è¾å ¥çloopï¼èsqliteèåæ件sqlite3.cå å«å®æ´çsqliteåºçå®ç°ã
ç¼è¯TCLæ¥å£
sqliteçtclæ¥å£æ¯ä¸ä¸ªå°ç模å被添å å°ä¸è¬çèåæ件ä¸ãç»ææ¯ä¸ä¸ªæ°çèååçæºç æ件ï¼ç§°ä¹ä¸ºâtclsqlite3.câãè¿ä¸ªæºç æ件æ¯çæä¸ä¸ªå¯ä»¥ä½¿ç¨TCL
loadå½ä»¤å»å è½½å°ä¸ä¸ªæ åçtclshæè wishä¸ï¼æè éçsqliteæ建æåçæä¸ä¸ªåç¬å¯ä¸çtclshçå ±äº«åºæéè¦çãä¸ä¸ªtclçèåçå¯æ¬è¢«å å«å¨ä¸è½½é¡µçTEA
tarballä¸ä½ä¸ºä¸ä¸ªæ件ã
为äºçæä¸ä¸ªlinuxä¸çsqliteçTCL-loadableåº,ä¸é¢çå½ä»¤éè¦æ»¡è¶³ï¼
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl
ä¸å¹¸çæ¯æ建Mac OS X å Windowsçå ±äº«åºå¹¶ä¸æ¯å¦æ¤ç®åã对äºè¿äºå¹³å°æ好使ç¨å å«å¨TEA tarballä¸çconfigureèæ¬åmakefile.
为äºçæä¸ä¸ªåç¬çtclshï¼å¯ä»¥ç¨äºsqliteéæé¾æ¥ï¼ä½¿ç¨å¦ä¸çç¼è¯å¨è°ç¨ï¼
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm
è¿éçæå·§æ¯-DTCLSH=1é项ãsqliteçTCLæ¥å£æ¨¡åå å«ä¸ä¸ªmainçè¿ç¨ï¼ç¨äºåå§åä¸ä¸ªTCL解éå¨å¹¶å¨ä»¥-DTCLSH=1ç¼è¯åè¿å ¥å°ä¸ä¸ªå½ä»¤è¡loopãä¸è¿°å½ä»¤å¯ä»¥å·¥ä½å¨LinuxåMac
OS X,è½ç¶ææ¶å¯è½éè¦ä¾èµäºå¹³å°è°æ´åºé项以åç¼è¯çTCLçåªä¸ä¸ªçæ¬ã
æ建èåæ件
ä¸è½½é¡µæä¾çsqliteèåæ件ççæ¬å¯¹å¤§å¤æ°ç¨æ·æ¥è¯´æ¯è¶³å¤çãç¶èï¼ä¸äºå·¥ç¨å¯è½æ³è¦æè éè¦æ建ä»ä»¬èªå·±çèåæ件ãä¸ä¸ªå¸¸è§çæ建ä¸ä¸ªå®å¶çèåæ件ççç±æ¯ä¸ºäºä½¿ç¨ç¹å®çcompile-time optionsæ¥å®å¶sqliteåºãåæ³sqliteèåæ件ä¸å å«äºè®¸å¤C代ç ç±è¾ å©ç¨åºåèæ¬çæã许å¤çç¼è¯æ¶é´é项影åè¿ä¸æå£ä»£ç èä¸å¿ é¡»å¨èåæ件ç»è£ åæä¾ç»ä»£ç çæå¨ãè¿ä¸ç³»åå¿ é¡»ä¼ ç»ä»£ç çæå¨çç¼è¯æ¶é´ç¸å ³çé项ä¼ä½¿å¾sqliteçåå¸çæ¬åä¸ç¸åï¼ä½æ¯å¨åè¿è¾¹æç« çæ¶åï¼ä»£ç çæå¨éè¦ç¥éçè¿ç»é项å æ¬ï¼
SQLITE_ENABLE_UPDATE_DELETE_LIMIT
SQLITE_OMIT_ALTERTABLE
SQLITE_OMIT_ANALYZE
SQLITE_OMIT_ATTACH
SQLITE_OMIT_AUTOINCREMENT
SQLITE_OMIT_CAST
SQLITE_OMIT_COMPOUND_SELECT
SQLITE_OMIT_EXPLAIN
SQLITE_OMIT_FOREIGN_KEY
SQLITE_OMIT_PRAGMA
SQLITE_OMIT_REINDEX
SQLITE_OMIT_SUBQUERY
SQLITE_OMIT_TEMPDB
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_VACUUM
SQLITE_OMIT_VIEW
SQLITE_OMIT_VIRTUALTABLE
为äºæ建ä¸ä¸ªå®å¶çèåæ件ï¼å ä¸è½½åå§çç¬ç«æºç æ件å°ä¸ä¸ªunixæè ç±»unixå¼åå¹³å°ãç¡®å®è·åçåå§æºç æ件ä¸æ¯âé¢ç¼è¯è¿çæºæ件âãä»»ä½äººé½å¯ä»¥éè¿å°ä¸è½½é¡µæè ç´æ¥ä»configuration management system.è·åå®æ´çä¸å¥åå§æºç æ件ã
å设sqliteæºç æ 被åå¨ä¸ä¸ªå为âsqliteâçç®å½ä¸ã计åæ建ä¸ä¸ªå¹³è¡ç®å½ä¸çå为âbldâçèåæ件ãé¦å éè¿è¿è¡sqliteæºç æ ç§çconfigureèæ¬è¿è¡æè éè¿å¶ä½ä¸ä»½æºç æ 顶å±ççmakfile模æ¿çä¸ä»½ï¼æ¥æ建ä¸ä¸ªåéçmakefile.ç¶åæå¨ç¼è¾è¿ä¸ªMakfileå»å å«éè¦çç¼è¯æ¶é´ç¸å ³çé项ãæç»è¿è¡ï¼
make sqlite3.c
å¨windowsä¸ä½¿ç¨MSVC:
nmake /f Makefile.msc sqlite3.c
sqlite3.cçmake
targetä¼èªå¨æé ä¸è¬çâsqlite3.câå并çæºç æ件ï¼ä»¥åå®ç头æ件âsqlite3.hâï¼åå å«TCLæ¥å£çèåæºç æ件âtclsqlite3.câãä¹åï¼éè¦çæ件å¯ä»¥è¢«æ·è´å°æ件ç®å½ä¸ç¶åæ ¹æ®ä¸è¿°å¾åçè¿ç¨ç¼è¯ã
æ建ä¸ä¸ªwindowsçå¨æé¾æ¥åºDLL
为äºå¨windowsæ建ä¸ä¸ªsqliteçdll使ç¨ï¼é¦å è·å对åºçèåè¿çæºç æ件ï¼sqlit3.cåsqlite.hãè¿äºå¯ä»¥ä»SQLite websiteä¸ä¸è½½æè åä¸è¿°åç¥çä¸æ ·å»å®å¶çæã
使ç¨å·¥ä½ç®å½ä¸çæºç æ件ï¼ä¸ä¸ªdllå¯ä»¥å¨msvcä¸ä½¿ç¨å¦ä¸å½ä»¤çæï¼
cl sqlite3.c -link -dll -out:sqlite3.dll
ä¸è¿°å½ä»¤éè¦è¿è¡å¨msvcçMSVC Native Tools Command
Prompt.å¦ä½ä½ å·²ç»å¨æºå¨ä¸å®è£ äºmsvcï¼ä½ å¯è½æå¤ä¸ªçæ¬çè¿ç§å½ä»¤æ示符ï¼é对äºxåxçèªå¸¦æ建çï¼æè 交åç¼è¯å°ARMçãä¾èµè¦æ±çDLLå»ä½¿ç¨å¯¹åºåéçå½ä»¤æç¤ºç¬¦å·¥å ·ã
å¦æ使ç¨MinGWç¼è¯å¨ï¼å½ä»¤æ¯è¿æ ·çï¼
gcc -shared sqlite3.c -o sqlite3.dll
注æMinGWåªçæä½çdllãå¦æä¸ä¸ªåå¼çMinGWå·¥ç¨å¯ä»¥ç¨æ¥çæä½çdllãå¯ä»¥æ¨æå ¶å½ä»¤è¡è¯æ³æ¯ç±»ä¼¼çãéè¦æ³¨æçæ¯æè¿çMSVCççæ¬çæçDLLså¯è½ä¸è½å·¥ä½å°WinXPæè æ´æ©çæ¬çwindowsä¸ãå æ¤ä¸ºäºæ大é度çå ¼å®¹ä½ ççæçdllï¼æ¨èMinGWãä¸ä¸ªå¥½çç»éªæ³åæ¯ä½¿ç¨MinGWå»çæä½çdllsï¼ä½¿ç¨msvcå»çæä½çdllsã