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,那么在了解了内嵌资源以后,接下来,android源码编译反思我们需要关注的是 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,这难道是巧合吗?不,仔细顺着这条线,我们大概就能明白微软的良苦用心,我们的配置文件自然是来自文件系统,而考虑到内嵌资源的存在,我们面对的linux 小游戏源码文件系统其实是一个广义的文件系统,它可以是物理文件、内嵌文件、Glob、对象存储(OSS)等等。
好了,千呼万唤始出来,现在终于要讨论 Blazor 这个话题啦!众所周知,静态博客生成器里主要存在着两种配置,即站点配置和主题配置,Hexo 里甚至还支持从特定文件夹里加载自定义的数据。所以,对于静态博客而言,它需要有从外部加载数据这个特性。我们知道,Blazor 分为服务器和客户端两个版本,两者的区别主要在于 Razor 模板由谁来渲染,前者相当于服务端渲染(SSR) + SignalR,而后者则是基于 WebAssembly,它可以直接在浏览器中加载。显然,后者更接近我们静态博客生成器的想法。由于 Hexo 使用 Yaml 作为配置语言,所以,为了读取原来 Hexo 博客的配置,参考《实现自己的.NET Core配置Provider之Yaml》这篇博客实现了一个 YamlConfigurationProvider。
在使用的过程中,遇到的问题是,它无法识别配置文件的路径。原因很简单,经过编译的 Blazor 会被打包为 WebAssembly,而 WebAssembly 在前端加载以后,原来的目录层级早已荡然无存。此时,基于物理文件的 PhysicalFileProvider 将无法工作。解决方案其实大家都能想到,换一种 IFileProvider 的易语言amf源码实现就好了啊!至此,奇妙的缘分产生了:
其实,官方文档中提到过,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ã