使用现代 CMake 构建多模块 C 项目:以 art、color、password 模块为例 CMake 是目前最主流的 C/C++ 构建工具之一,具备跨平台、模块化、维护性强等优势。...本文将以你提供的多模块 C 项目为例,介绍如何使用现代 CMake: 组织清晰的模块目录结构; 每个模块单独构建为静态库; 主程序链接多个模块; 配置输出产物目录; 实现跨平台构建支持。 1....如果使用 MinGW 构建(Windows): cmake -G "MinGW Makefiles" .. mingw32-make 构建完成后: ....,可删除 ├── CMakeCache.txt # 构建缓存,可删除 └── MyApp.sln # Visual Studio 生成的解决方案(若使用) 若只需产物...结语 借助 CMake,你可以快速构建跨平台、结构清晰、模块可扩展的 C 项目。
CMake 是现代 C/C++ 项目中最主流的构建工具之一。它不仅可以帮助开发者组织源代码、管理依赖、构建库文件,还能提升项目的模块化程度和可维护性。...本文将以一个简单模块 color 为例,介绍如何使用 CMake: 构建一个结构清晰的 C 项目; 将模块编译为静态库; 配置可执行程序链接库; 自定义库输出路径; 支持跨平台构建(Windows/macOS...,具备独立构建能力 build/ 构建输出与源代码分离,保持干净 CMakeLists.txt 配置统一构建规则与链接流程 2....构建输出目录说明 借助 CMAKE_*_OUTPUT_DIRECTORY 变量,我们可以控制构建产物的输出位置: 变量名 描述 示例输出路径 CMAKE_ARCHIVE_OUTPUT_DIRECTORY...项目总结与回顾 关键点 内容 使用 add_library() 构建静态/动态库 模块化构建 使用 target_link_libraries() 连接模块 清晰解耦 使用输出变量设置生成目录 可控构建产物结构
--target HelloC 构建指定 target 使用 Ninja 构建系统 cmake -G "Ninja" .....工具链选择:Windows 推荐 MinGW 或 MSYS2 以使用 GNU 工具链。 CMake 最低版本:建议 ≥ 3.10,兼容主流功能。...8️⃣ 总结 CMake 构建流程简单且跨平台: 建议使用 Out-of-Source 构建 运行 cmake 生成构建文件 通过 cmake --build ....编译 运行生成的程序 通过合理配置和跨平台命令,CMake 方便地支持多操作系统和构建工具。 本节内容已经全部介绍完毕,希望通过这篇文章,大家对 CMake 有了更深入的理解和认识。...感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。
在之前使用CMake构建程序的脚本(CMake构建学习笔记-目录)中,大部分内容都有比较强的相似性,那么是不是可以这些相似的内容提取出来作为一个单独的脚本,在构建具体的程序的时候再去调用这个脚本呢?...然后是构建目标的类型,有的库使用CMAKE_CONFIGURATION_TYPES,有的库使用CMAKE_BUILD_TYPE,值设置成RelWithDebInfo表示Release版本,但是带调试信息...接下来是设置依赖库查找路径CMAKE_PREFIX_PATH和安装路径CMAKE_INSTALL_PREFIX。最后是添加额外的CMake缓存变量,这些缓存变量通常与要构建的库有关。...使用生成的配置参数CMakeArgs进行项目配置:cmake SourceLocalPath 编译、链接,生成构建目标:cmake --build $BuildDir --config RelWithDebInfo...那么有没有具体使用这个cmake-build.ps1脚本的例子呢?后续文章中的程序构建会使用这个脚本,敬请期待。
//4.关闭state lua_close(L); return ; } example文件夹新建CMakeLists.txt文件,输入如下魔法: CMAKE_MINIMUM_REQUIRED.../src) #指定链接库文件目录 LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib) #将hello.cpp生成可执行文件hello ADD_EXECUTABLE(...luaDemo ${SOURCE}) #指定hello 链接库myprint TARGET_LINK_LIBRARIES(luaDemo lua51) cd到example文件夹下。...执行CMake操作即可,不知道比写makefile高明到哪里去了。 ? 注意,exe执行时要与lua51.dll放在一起....name = "<<str.c_str()<<endl; //tbl:name = shun luaAdd(L,10,20); luaAdd(L,100,200); //至此,栈中的情况是
在连续论述了几篇关于CMake如何使用的文章之后,笔者也是感觉被掏空了。接下来几篇就还是回到构建依赖库的问题上,容笔者花时间找到更好的主题来介绍更多关于CMake使用干货。...笔者认为在构建上uriparser这个库非常不错,在主页上就已经提供了CMake项目的引入示例和可用的CMake构建选项,大家可以参考一下。...不得不说,要是所有的第三方库的文档都写的这么清楚那就世界和平了。 好了不废话了,直接给出构建的关键指令如下所示: # 配置CMake cmake .....,指定构建类型 cmake --build ....--config RelWithDebInfo # 安装阶段,指定构建类型和安装目标 cmake --build .
处理多文件时makefile文件的改变 cmake_minimum_required(VERSION 3.5) #PROJECT(second)#ADD_EXECUTABLE(hello main.cpp...子makefile文件 cmake_minimum_required(VERSION 3.5) #设置此工程的源码set(SRC add.cpp)#设置输出的库的类型(SHARED)和名字(add)add_library...三、 共享库的链接 1. 文件结构 ? 2....子makefile文件及main.cpp 把之前一些小功能结合一下 cmake_minimum_required(VERSION 3.5) #被链接的库相对路径link_directories(...../src/libs/lib)#被链接库的头文件相对路径include_directories(..
概论 在之前的系列博文中,我们学习了如何构建第三方的依赖库,也学习了如何去组建自己的CMake项目,尤其是学习了CMake的核心配置文件CMakeLists.txt如何编写。...所谓CMake工程,指的就是不再需要建立传统的MSVC项目,例如.sln或者.vcxproj工程文件,而是直接使用CMakeLists.txt作为工程配置文件来进行加载,进行进行构建和开发的工作。...目前,这两种配置文件Visual Studio 2019都支持,但是更推荐使用CMakePresets.json,因为更加标准化,符合CMake的规范,可以被多种IDE和构建工具识别和支持。...具体来说,如果程序主页面,尤其是主页面的工具栏与下图7有所不同: 那么可以在菜单栏依次选择工具->选项->CMake->常规,勾选“首次使用CMake预设值进行配置、构建和测试”的单选框,如下图8所示:...} ] } 请务必注意,我们这里使用的是CMake比较推荐和比较新的目标链接机制来引入libzip库,关于这一点请务必复习上一篇博文的内容。
快速入门:使用 CMake 进行构建 关于GoogleTest和CMake结合使用,可以参照GoogleTest官方文档Quickstart: Building with CMake 特此记录一下...,如果在Windows下,需要安装Visual Studio开发工具以及CMake软件;如果是Linux或MacOS,则需要安装Gcc或CLang,还有CMake;其中C++编译器要最少支持C++14标准...相关资料 Quickstart: Building with CMake GoogleTest for CMake Setting up CMake for Google Test GoogleTest-Modern...CMake
一.CMake准备 首先准备好要用到的CMake工具和Dlib(此处使用Dlib19.1),,分别可以从下面两个链接下载 https://cmake.org/download/ https...按照其所提示的打开cmd,先将文件夹跳转到当前解压出的dlib-19.1\dlib\matlab中,然后使用其所提示的这几个命令。...先打开dlib-19.1\dlib\matlab中的cmake_mex_wrapper文件,确认一下Matlab的地址是否是文件内的地址(如果之前安装Matlab使用的是默认地址则这部分不需要改动),如果有更改过需要调整下这几行...等待一段时间后可以在输出窗口中看到之前生成失败的项目都已经成功生成了! ?...四.结果测试 最后进行测试,先打开dlib-19.1\dlib\matlab\build\Debug(如果刚才是使用了Debug生成的话),可以看到是否成功生成了Matlab可以使用的.
CMake是一个跨平台的Makefile生成工具,可以根据特定的规则生成相应的Makefile文件,并对C/C++源代码进行编译和管理。...有两篇博客介绍CMake的使用,比较通俗易懂,链接地址是: Cmake 详解 CMake 入门实战 CMake的官方下载地址为:https://cmake.org/download/ 官方文档地址为:CMake...3.16 Documentation 官方的CMake指南地址为:CMake Tutorial 一、CMake中添加对C++11的支持 1、在对应的CMakeLists.txt文件中加入以下语句: add_definitions...}") endif(CMAKE_COMPILER_IS_GNUCXX) 2、延伸 如何写cmake使其包含c++11特性 (-std=c++11如何写进cmakeList.txt) 使用的g++版本和...github上面有一个韩国人jacking75写的简单的cmake使用示例, examples_CMake项目地址是:https://github.com/jacking75/examples_CMake
Dlib 是一个 C ++ 工具箱,其中包含用于在 C ++ 中创建复杂软件以解决实际问题的机器学习算法和工具。请参阅 http://dlib.net 获取项目文档和 API 参考。...Github 链接: https://github.com/davisking/dlib 编译 dlib C ++ 示例程序 进入示例文件夹并输入: mkdir build; cd build; cmake...这会构建所有的示例,如果你有一个支持 AVX 指令的 CPU,请按如下方式将它们打开: mkdir build; cd build; cmake .....默认情况下,Visual Studio 的输出和自身执行都是 32 位的,所以你必须明确地告诉它使用 64 位: cmake .....-G "Visual Studio 14 2015 Win64" -T host=x64 用 dlib 编译你自己的 C++ 程序 示例文件夹有一个 CMake 教程会你该怎么做。
通用脚本 在之前的文章《CMake构建学习笔记21-通用的CMake构建脚本》中我们创建了一个通用的cmake构建脚本cmake-build.ps1: param( [string]$SourceLocalPath...#Remove-Item -Path $BuildDir -Recurse -Force 在《CMake构建学习笔记22-libxml2库的构建》这篇文章中使用这个脚本构建了libxml2库: param...构建方式的程序的构建行为是比较统一的,这个构建libxml2库的脚本可以进一步封装,形成一个通用的调用cmake-build.ps1构建程序的脚本。...cmake-build.ps1只是包含了调用cmake执行构建的内容,但是其实整个构建过程需要做的事情很多,比如安装符号库、安装程序的依赖库等等,这些过程指的再封装一层构建的脚本。...《CMake构建学习笔记23-SQLite库的构建》。
使用CMake和vcpkg搭建构建环境的具体步骤: 安装CMake: 从CMake官方网站(https://cmake.org/download/)下载并安装CMake的最新版本。...) 确保在需要使用这些库的地方正确地链接它们。...仓库的实际路径) 构建项目: 使用生成的构建文件进行构建。...根据你的操作系统和构建工具,可以执行以下命令: 在Windows上: 使用Visual Studio:打开生成的.sln文件并构建项目。...CMake和vcpkg搭建构建环境的具体步骤。
引言 尝试使用CMake构建SpatiaLite及其依赖库,但是没有成功。...nmake其实只是一个简单的make系统,对应的就是Linux下的Makefile,可以进行编译、链接,也可以把构建参数提取出来,但是无法动态去生成构建参数。...这里也可以看到使用nmake构建的缺陷,应对不同的构建需求,需要提供多个配置文件。如果是使用CMake构建,使用一个CMakeList.txt即可。...至于具体的构建安装过程,大部分依赖库可参看如下文章: 《CMake构建学习笔记24-使用通用脚本构建PROJ和GEOS》 《CMake构建学习笔记20-iconv库的构建》 《CMake构建学习笔记23...3.2.1 构建libexpat 在构建freexl之前,需要先构建libexpat库。libexpat是一个用C语言编写的、开源的、高效的XML解析库,已经支持使用CMake构建。
构建过程 2.1 Windows环境 首先要说明的是OpenSSL目前的版本(我使用的是3.4.0版本)还没有支持使用CMake构建。但是好在作为老牌的开源库,它的构建文档非常详细。...先介绍一下Windows环境下的构建,Windows下当然使用MSVC编译器进行构建了,这就要用到MSVC的命令行的工具。...我这里使用的是x64 Native Tools Command Prompt for VS 2019,如下图1所示: 除此之外,MSVC的命令nmake似乎缺少像linux Make或者CMake的Configure...2.2 Linux环境 在Linux环境下构建OpenSSL就相对简单了,我这里使用的Ubuntu20.4,构建安装到GISBasic环境变量指定的目录中,具体脚本如下: #!...使用方式 虽然Openssl并没有提供CMake的编译方式,但是构建完成后却提供了OpenSSLConfig.cmake配置文件,能够被CMake正常识别引入。
不过,有点麻烦的是这个工具并没有提供CMake构建的方式。那么可以按照构建giflib的方式,自己组织CMakeList.txt,正好这个项目的代码量并不多。...另一个问题是,minizip其实是个可执行程序,Windows下不能直接将其构建成动态链接库,因为Windows下的动态链接库是需要设置导出的,否则就会提示找不到符号的问题。...,指定构建类型 cmake --build ....但是在Windows下笔者还是倾向于优先使用动态库。一直以来,二进制兼容的问题一直是困扰C/C++编程的重要问题。...比如说,你用VS2010编译的动态库在VS2013的环境下可能是无法使用的,这还是同一家产品的不同版本就会造成这个二进制成果的差异性问题。
本文将介绍如何使用 SDCC + CMake 构建一个适用于 STC8 系列(8051 架构)MCU 的嵌入式工程,从软件准备到最终生成 .hex 文件,适合初学者逐步上手。 一、前提条件 1....⚙️ 四、构建系统:CMake 本项目使用 CMake 构建系统来组织源代码、配置编译器(如 SDCC)、管理构建过程,并生成最终的十六进制(.hex)固件文件。...整个构建过程高度自动化,便于在不同平台下统一使用命令行进行构建。 1. CMakeLists.txt 这个文件是 CMake 的核心配置脚本,用于定义整个项目的构建逻辑。...链接为 .ihx 文件:将多个 .rel 链接为 SDCC 的 Intel HEX 格式文件(.ihx)。...这是一个自定义的 CMake 脚本,用于在构建过程的最后一步,将 SDCC 生成的 .ihx 文件转换为 .hex 文件。
Freetype是一个广泛使用的开源字体渲染库,可以加载、渲染和显示各种类型的字体文件。一般的用户来说可能没有直接使用过这个库,都是通过使用依赖于它的依赖库来间接使用它。...根据笔者构建的经验,构建这个库需要zlib、libpng这两个库,可以按照本系列博文的相应文章提前构建好。关键的构建指令如下所示: # 配置CMake cmake .....,指定构建类型 cmake --build ....--config RelWithDebInfo # 安装阶段,指定构建类型和安装目标 cmake --build ....zlib、libpng,这样在构建的时候就能自动找到这两个库。
libjpeg本身的构建没什么特别的,不过值得说道的是libjpeg存在一个高性能分支叫做libjpeg-turbo,通过汇编代码使用SIMD(Single Instruction, Multiple...另外,jpeg的格式也固定很久了改动也不太大,估计也不上版本太高的功能,因此还是决定使用libjpeg-turbo。...构建libjpeg-turbo的关键指令如下所示: # 配置CMake cmake .....,指定构建类型 cmake --build ....--config RelWithDebInfo # 安装阶段,指定构建类型和安装目标 cmake --build .