
CMake高级技巧
文章平均质量分 57
专注于企业项目CMake文件 make ninja 编写精华技巧!
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
程序员乐逍遥
15年C/C++跨平台开发资深程序员、VX找我ha666ck
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Qt5 框架 CMake 探秘
首先在Qt5 的安装目录下,提供了 find_package()需要的脚本文件。这里主要就是循环查找每一个COMPONENTS组件,获取相关目标。然后我们注意看COMPONENTS ,也提供了相应的配置文件。功底深厚的朋友估计已经明白是怎么回事了。原创 2025-06-11 00:16:19 · 153 阅读 · 0 评论 -
CMake测试find_package()命令的相关原理
结果一目了然, 只要我提供XXXConfig.cmake文件 ,那么 XXX_FOUND就是1 ,表示找到了。find_package( COMPONENTS ) 在的脚本内 相关的参数都可以获取,我猜测可以再次 循环调用 find_package( )来查找COMPONENTS。AConfig.cmake (不提供AConfigVersion.cmake 版本文件)()命令,测试一下包和组件的原理!最近研究了 CMake的。原创 2025-06-11 00:04:53 · 303 阅读 · 0 评论 -
VSCode 使用CMake 构建 Qt 5 窗口程序
【代码】VSCode 使用CMake 构建 Qt 5 窗口程序。原创 2025-06-09 23:52:57 · 456 阅读 · 0 评论 -
CMake 中 CTest 自动化测试
CTest发现并运行测试用例;输出测试结果;支持与 CDash 集成进行测试数据上报;支持并行执行测试;支持生成 XML 测试报告(JUnit 格式);支持设置超时、环境变量等高级选项。CTest 并不直接编写测试逻辑,而是通过调用可执行文件或脚本来运行测试任务。这些任务通常由add_test()命令定义在文件中。原创 2025-06-09 11:23:31 · 330 阅读 · 0 评论 -
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 模块来实现自动下载、构建和链接第三方库。我们将以 fmt 这个流行的格式化库为例,演示如何:2. 编写 CMakeLists.txt3. 编写 main.cpp在 中编写如下代码:4. 构建项目进入 目录并运行:然后运行程序:输出应为:📦 其他常用第三方库示例你可以按照类似方式引入其他库:只需替换 中的 URL 和 TAG 即可。原创 2025-06-09 10:22:06 · 483 阅读 · 0 评论 -
CMake控制VS2022项目文件分组
场景推荐方法简单项目精细控制单个文件源码结构复杂模块化项目+ 分别配置。原创 2025-06-07 00:05:50 · 214 阅读 · 0 评论 -
CMake 为 Debug 版本的库或可执行文件添加 d 后缀
如果你希望更灵活地控制输出文件名,比如根据编译配置动态改变输出名,可以使用条件判断。这种方式允许你分别为 Debug、Release 设置不同的输出名称。方法适用范围灵活性备注全局高推荐用于统一命名风格单个目标高更细粒度控制条件判断单个目标中适合简单修改宏/函数封装多目标高提高代码复用性可执行文件后缀设置EXECUTABLE高需要显式设置对于大多数项目,推荐使用第一种方法:设置。原创 2025-06-06 23:24:48 · 224 阅读 · 0 评论 -
使用 CMake 管理库版本号(VERSION 和 SOVERSION)
概念描述VERSION完整的版本号(主.次.补丁),用于标识具体构建版本SOVERSION主版本号,用于标识二进制兼容性,决定链接器行为推荐做法修改接口且不兼容时升级 SOVERSION,否则只升级 VERSION。原创 2025-06-06 15:23:48 · 387 阅读 · 0 评论 -
使用 CMAKE_DEBUG_TARGET_PROPERTIES调试目标属性
在使用 CMake 构建项目时,有时我们需要深入了解某个目标(target)的编译选项、包含路径、链接库等。 是一个非常有用的调试工具。 是 CMake 中的一个内部变量,用于控制是否在配置阶段输出目标的详细属性信息。当你设置该变量为 时,CMake 在解析构建系统时会打印出更多关于目标(如可执行文件或库)的属性内容。你可以在你的 文件中启用该调试功能:一旦启用,CMake 将会在配置过程中输出类似以下信息(具体取决于你的项目结构):三、手动获取目标属性除了使用 ,我们还可以使用 函数来手原创 2025-06-05 16:38:47 · 222 阅读 · 0 评论 -
Qt6 CMakeLists.txt文件详解
到这里,基本清晰了!原创 2024-11-17 15:12:45 · 286 阅读 · 0 评论 -
c_cpp_properties.json文件的作用
IntelliSense 是 VS Code 中内置的一个有用工具,它提供各种代码编辑功能,可帮助您更快、更高效地编写代码。例如,代码完成、参数信息、语法突出显示、代码操作(灯泡)和成员列表都是使用 IntelliSense 生成的。IntelliSense 配置存储在文件中,该文件在您的工作区中自动创建。如何产生 c_cpp_properties.json文件?这里配置一下头文件,就可以自动提示了,以OpenCV为例子。其中的属性可以在界面上改,文件会自动同步。原创 2024-10-10 22:04:37 · 380 阅读 · 0 评论 -
CMAKE_VERBOSE_MAKEFILE变量
它实际上是用来显示 CMake 的版本信息的,而不是用来控制构建过程中的详细输出。如果你想要控制构建过程中的详细输出,应该使用。这个变量会让 CMake 生成详细的编译数据库,其中包含了所有的编译命令,但不会在构建时输出这些命令。在 CMake 中,如果你想在构建过程中获得详细的输出,类似于使用命令行选项。这个变量会让 CMake 在构建时输出构建系统的详细命令。命令时)而不是构建阶段获得详细输出,那么对应的变量是。这将确保在构建时,你可以看到所有的构建命令。如果你的意图是在构建时获得类似于。原创 2024-10-10 21:41:57 · 580 阅读 · 0 评论 -
PCL 1.8.1 + VTK 1.8.0 + QT5.14.2+ VS2017 环境搭建
【代码】PCL 1.8.1 + VTK 1.8.0 + QT5.14.2+ VS2017 环境搭建。原创 2024-10-06 16:14:43 · 590 阅读 · 0 评论 -
Windows上 minGW64 编译 libssh2库
安装之后,产生如下静态库,安装到MSYS2的 /usr/local 目录下了。编译器使用 Qt 6 自带的 minGW 11.2.0。使用CMake来编译libssh2。来编译 openssl库。里面的 minGW64。原创 2024-09-21 21:33:40 · 333 阅读 · 0 评论 -
Qt 5.14.2 +VS2017+ VTK 8.0 + QVTKWidget 插件 运行环境
VS2017 编译,安装。原创 2024-10-06 15:43:35 · 350 阅读 · 0 评论 -
Windows上 minGW64 编译 libssh2库
安装之后,产生如下静态库,安装到MSYS2的 /usr/local 目录下了。编译器使用 Qt 6 自带的 minGW 11.2.0。使用CMake来编译libssh2。来编译 openssl库。里面的 minGW64。原创 2024-10-06 15:26:20 · 321 阅读 · 0 评论 -
find_package命令的搜索顺序
命令在CMake中有两种模式:模块模式(Module mode)和配置模式(Config mode)。x.y。原创 2024-09-12 21:17:14 · 314 阅读 · 0 评论 -
CMake GUI 界面上的 分组 与 高级
首先,分组它是自动的,根据第一个单词自动分组,所以名称前缀取一样的即可。高级需要设置 变量的 ADVANCED 属性。在CMakeLists.txt文件中应该怎么设置?原创 2024-09-03 16:45:58 · 234 阅读 · 0 评论 -
CMake中的奇技淫巧
CMake可以与持续集成/持续部署(CI/CD)系统很好地集成,通过CMakePresets.json或CMake的命令行参数来控制构建过程。CMake的`cmake_minimum_required`命令不仅设置了最低版本要求,还可以通过版本范围来提高兼容性。通过设置`BUILD_SHARED_LIBS`变量,CMake可以灵活地控制是构建动态库还是静态库。CMake允许你精确控制目标之间的依赖关系,并且可以使用生成器表达式来指定条件性的编译选项。CMake可以探测系统环境并根据探测结果调整构建选项。原创 2024-08-08 12:10:05 · 210 阅读 · 0 评论 -
CMake 中file(GLOB ) 命令详细解释
所以,加了CONFIGURE_DEPENDS ,我们在 cmake --build build 它会检测一下,你目录中是否有改动,如果有,则重新会生成构建系统,相当于重新执行file( GLOB)命令!当我把c.c 删除了之后,这时在 cmake --build build 它会重新生成构建系统,SRC中将不包含c.c。当我把c.c 删除了之后,这时在 cmake --build build 会显示找不到c.c ,导致报错。那么接下来,如果我使用CONFIGURE_DEPENDS。原创 2024-08-08 12:02:22 · 1632 阅读 · 0 评论 -
CMake中编译器如何选择?
如果使用了 CMake 工具链文件(toolchain file),则该文件中指定的编译器将会被使用。CMake 的这些机制使得用户可以灵活地指定和控制所使用的编译器,从而适应不同的开发环境和需求。:CMake 会尝试使用系统默认的编译器。例如,在 Unix 系统上,通常是。来决定使用哪个 C 和 C++ 编译器。,而在 Windows 上则可能是。:CMake 会检查环境变量。文件中也可以指定编译器。原创 2024-08-05 16:23:49 · 1257 阅读 · 0 评论 -
Windows 下 使用 CMake + Ninja + VS2022 构建C语言项目
安装好VS2022 与 ninja。原创 2024-08-05 15:16:36 · 931 阅读 · 0 评论 -
Makefile中先决条件中 更改CFLAGS
如果某个目标没有先决条件或配方,并且目标是不存在的文件,则 make 会在其规则运行时假设该目标已重新生成。这意味着依赖于该目标的所有目标将始终运行其配方。后面的同名目标、保留前面的先决条件,覆盖前面配方。同名目标 task1。原创 2024-07-31 11:46:45 · 156 阅读 · 0 评论 -
VS2022 使用CMake 设置调试
其中 "name": "haha" 为 调试名,指定运行时,dll的搜索目录!原创 2024-06-16 21:31:21 · 1406 阅读 · 0 评论 -
软件架构x86 、 x86_64、 arm64、aarch64 、PowerPC架构、MIPS架构、RISC-V架构
RISC是一种执行较少类型计算机指令的微处理器,它能够以更快的速度执行操作,使计算机的结构更加简单合理地提高运行速度,相对于X86 CPU架构具有更加均衡的性能功耗比。,CISC指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。i386指的是Intel 386处理器的型号,它是Intel x86架构的一部分,而x86是一种广泛使用的处理器架构,用于PC和服务器等设备。(IA-64):由Intel和HP合作开发的处理器架构,用于高性能计算。原创 2024-06-08 16:41:43 · 1248 阅读 · 0 评论 -
make 中 DESTDIR 和 --prefix 的区别
这两个示例分别展示了如何使用两种流行的构建系统( + 和 + )来编译和安装软件,并解释了 和 这两个选项的作用。这个命令运行 脚本,它是 生成的,用于检测系统环境并创建适当的 。这里: 指定了软件安装的基本目录。这意味着软件的可执行文件、库文件、头文件等将安装到 目录下及其子目录中。如果不指定 ,则默认安装到 。这个命令使用 工具来编译软件。 是一个选项,表示 可以同时运行8个作业(jobs),这样可以加快编译过程,利用多核处理器的优势。这个命令执行 目标,根据 将编译好的软件安装到原创 2024-06-05 21:51:51 · 607 阅读 · 0 评论 -
GNU Linux 下安装目录的规范
官方链接。原创 2024-06-05 21:27:27 · 237 阅读 · 0 评论 -
检查用户是否在错误的目录中运行了CMake命令
但是有一些不熟悉CMake的依然会直接在当前目录配置,比如 CMake .那么我们如何在CMakeLists.txt 进行检测,避免这种行为呢?这样可以避免 生成的一些文件污染 代码目录。原创 2024-06-05 15:10:12 · 109 阅读 · 0 评论