CMake入门实战 补充说明

cmake入门实战 CMake入门实战 本文用来记录基本的Cmake用法,以一个实例,讲解如何通过cmake构建一个一个基本的工程,文件的目录如下: 说明: bin文件夹下的debug和release分别存放编译输出的文件和相关依赖的动态库。 common为公共目录,include为公共头文件,libs里面是公共静态库。 mysqlpp目录下是当前项目的源代码。 CMakeList.txt是用来编写组织工... 阅读详情

“cmake入门实战”(http://www.hahack.com/codes/cmake/)是一个很不错的cmake入门教程,但还有一些不太完善的地方,现补充如下:


-----------------------------------------------------------------------
“自定义编译选项”一节中(对应例程为Demo4),将 config.h 保存在 ${PROJECT_BINARY_DIR} ,但是 main.cc 中的包含语句为:

#include "config.h"

这意味着只能使用 cmake 的“内部构建”方式。如果使用“外部构建”方式,编译时将提示找不到 config.h 。

有两种解决办法:

1 修改 configure_file 指令,将 config.h 保存在 ${PROJECT_SOURCE_DIR} 。

2 将 ${PROJECT_BINARY_DIR} 加入项目的头文件搜索路径。代码如下:
     include_directories( ${PROJECT_BINARY_DIR} )

推荐方法2,因为方法1会“污染”源代码目录。


-----------------------------------------------------------------------
“自定义编译选项”一节中(对应例程为Demo4),执行 ccmake 或 cmake -i 构建项目时表现正常,即:

    如果 USE_MYMATH=ON,则在 config.h 中定义宏 USE_MYMATH,并生成库文件 libMathFunctions.a。

    如果 USE_MYMATH=OFF,config.h 中不定义宏 USE_MYMATH,也不生成库文件。

但是执行 cmake 构建项目时,结果却是:

    config.h 没有定义宏 USE_MYMATH,但是生成了库文件 libMathFunctions.a。

原因在于 configure_file 指令位于 option 指令之前,也就是说生成 config.h 时,选项 USE_MYMATH 还未定义,因此 config.h 没有定义宏 USE_MYMATH。之后 option 指令定义选项 USE_MYMATH ,并设置初始值为 ON ,因此会编译生成库文件。

解决办法:将 option 指令放在 configure_file 指令的前面。


-----------------------------------------------------------------------
“自定义编译选项”一节中(对应例程为Demo4),已经将 ${PROJECT_SOURCE_DIR}/math 加入项目的头文件搜索路径,因此 main.cc 包含 MathFunctions.h 时,没有必要指定 math 子目录。

CMake 详细说明 CMake 是一款跨平台、开源的构建系统生成工具,核心作用是读取开发者编写的配置文件(CMakeLists.txt),根据不同操作系统(Windows/macOS/Linux)和编译器(MSVC/GCC/Clang),自动生成对应的本地构建文件(如 Windows 的 .sln/.vcxproj、Linux/macOS 的 Makefile、Xcode 的 .xcodeproj 等),从而解决 C/C++ 项目 “跨平台构建配置复杂” 的核心痛点。 阅读详情

相关推荐

浅析CMake —— CMake入门详细教程 CMake基本命令和用法

所有目标文件和所需的库合并在一起。0和1组成的二进制指令。知识点之间的内在联系。

weixin_49649078的博客 1394

cmake学习笔记 一

cmake

zhjs_abc的博客 1040

CMake入门教程【实战篇】指定FTP下载文件

CMake使用FTP下载代码

小鱼酱的博客 2412

cmake 自动生成配置文件和添加头文件

Config.h是自动生成的头文件,是根据配置文件Config.h.in生成的。 configure_file 命令是cmake内置命令,对应cmake文档在: Documentation » cmake-commands(7) cmake config_file命令文档

weixin_49867936的博客 3809

CMake入门

我们在很多SLAM 的源码里都能看到CMake 的使用,这个CMake 到底是什么呢有什么用呢?

2301_76831056的博客 1821

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 570

cpp-cmake中的config编写

CMakeLists.txt编辑 # CMakeList.txt: CMakeProject2 的 CMake 项目,在此处包括源代码并定义 # 项目特定的逻辑。 # cmake_minimum_required (VERSION 3.8) #project(Tutorial VERSION 1.0) project(DEMO VERSION 1.0) set (MyDemoVersio...

Cj 1335

初学者入门机器学习 (ML)的推荐教程

了解基本的机器学习概念并不难。有大量免费的在线博客文章、视频和编码教程可以引导您了解基础知识——从介绍性内容到常见应用程序,再到算法和应用技能。这篇文章总结了一些用于介绍 ML 的最佳免费选项。它按逻辑顺序排列,每个概念都建立在上一个概念的基础上。

u010542847的博客 4617

CMake初级简明教程

本文简明介绍了cmake中常用函数的基本常用写法,并附有示例和个人理解。

m0_51194302的博客 1336

机器学习笔记 - 神经辐射场(NeRF)的简要概述

神经辐射场十分重要。在表示和渲染 3D 场景领域,神经辐射场 (NeRF) 在准确性方面取得了巨大突破。给定底层场景的多个图像,NeRF 可以从任意视点重建该场景的高分辨率、2D 渲染图。与局部光场融合 (LLFF) 和场景表示网络 (SRN) 等现有技术相比,NeRF 更能够捕获场景外观和几何形状的复杂组成部分(例如,依赖于视图的反射和复杂的材料)。NeRF的研究目的是合成同一场景不同视角下的图像。

学以致用 知行合一 1691

13、7自由度机械臂混合逆运动学算法解析

本文介绍了一种针对7自由度机械臂的混合逆运动学算法,通过引入额外参数Φ解决冗余自由度问题,并实现了避障、避免关节超限和扩大工作空间。该方法采用解析逆运动学求解策略,克服了机械臂在奇异位姿时的配置不连续性问题。通过对比实验验证了该算法在腕部关节角度连续性和位姿可达性方面的优越性,同时结合躯干逆运动学显著扩展了机械臂的工作空间。

rgv23456789的博客 236

如何用CMake搭建编译工程

https://mp.weixin.qq.com/s/uK2AVdC88Nuj4sTFtN2-sA

EricWZY2008的专栏 1014

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 238

Cmake入门(一文读懂)

CMake是一个强大的跨平台构建工具,它能够自动生成用于构建项目的Makefile、Visual Studio项目文件或其他构建系统所需的文件。使用CMake,可以更轻松地管理复杂的C语言项目,使它们易于维护和跨平台。如果对Makefile不了解可以看此文章→Makefile入门。

ZBraveHeart的博客 1万+

TIA protal与SCL从入门到精通(1)——SCL编程入门

SCL语言是由Pascal而生的结构化程序语言,与梯形图相(LAD)比,SCL语言的灵活程度更高,易于编写控制算法。 本教程基于的平台如下 软件:TIA 15.1 CPU 1516 (1)直接创建纯SCL的程序块儿; (2)在LAD/FBD中在插入SCL程序段。 在程序段中直接右击插入即可,但是插入的程序段并不能完全使用SCL语法,GOTO等跳转指令就不能使用。在SCL中一般不能使用绝对地址进...

苦走一口田 7万+

模型预测控制(MPC)解析(三):多输入多输出系统

本文为阅读笔记,仅供学习交流使用!!! 在之前的文章中,为了简单起见,以单输入单输出系统为例介绍了MPC控制的实现方法。因为使用的是状态空间方程作为系统模型,这种方法可以轻松的扩展到多输入多输出系统中。 ...

行者无疆的博客 1万+

make与cmake入门

cmake学习记录

NRWHF的博客 4100

SAP 公司间采购简介

SAP公司间采购(Intercompany Procurement)是指企业集团内部不同法人实体之间的采购和销售流程。这种流程在跨国公司或有多个独立运营子公司的企业中非常常见。SAP提供了标准的功能来处理公司间采购,确保财务和物流流程的透明性和效率。以下是SAP公司间采购的基本流程及其相关模块的简介。

我小时候很黑的博客 1378

补充番外14:cmake笔记

零、cmake的构建步骤 步骤 1)第一步是cmake -B build,成为配置阶段(configure),这时候只检测环境并生成构建规则,会在build目录下生成本地构建系统能识别的项目文件(Makefile或是.sln) 1)这个阶段可以通过-D设置缓存变量。第二次配置时,之前的-D添加任然会被保留 2)第二步是cmake --build build ,成为构建阶段(build),这时候才实际调用编译器来编译代码 1)cmake -B build -DCMAKE_INSTALL_PREFIX=

谢白羽 5004

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CMake 入门实战

看到了一篇不错的CMake入门实战教程,文章链接地址为:CMake 入门实战,对应的Github源代码仓库地址为:cmake-demo 另外在IBM 开发者中文社区上面也找到了一篇CMake的入门文章:在 linux 下使用 CMake 构建应用程序 相关主题 要了解 CMake, 请参考其官方网站:http://www.cmake.org/。 维基百科中对 CMake 也有非常详细的说明,具体请参考:http://zh.wikipedia.org/wiki/CMake。 ...

ccf19881030的专栏 267

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CMake的使用说明

CMake”是“cross platform make”的缩写,是跨平台的构建系统生成器。CMake 几乎覆盖了所有需要跨平台构建的领域,从操作系统到游戏引擎,从机器学习框架到嵌入式系统。其灵活性和社区支持使其成为现代软件开发的标准构建工具。如果某个项目需要兼容多种编译器和操作系统,CMake 几乎是首选方案。

ch593030323的专栏 962

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

超强CMake实战指南cmake-examples:从入门到精通全解析

cmake-examples是GitHub加速计划中的一个实用项目,提供了丰富的CMake示例,帮助开发者从入门到精通CMake的使用。无论你是刚开始接触CMake的新手,还是有一定经验想要提升的开发者,这个项目都能为你提供全面且实用的指导。 ## 📚 项目核心内容概览 cmake-examples项目结构清晰,按照不同的主题和难度进行了分类,主要包括以下几个部分: ### 01-basi

gitblog_00935的博客 1039

CMake入门教程 2 构建、运行与说明

CMake入门教程 2 构建、运行与说明

代码改变世界 623

CMake入门实例、宏变量说明

本文主要用来记录使用CMake在编译代码时一些常用命令,及过程中注意的点。CMake官方使用教程文档 编译动态库 add_library: 为生成的库添加源文件,是库的名字,直接写名字即可,不要写lib,会自动加上前缀。 STATIC表示静态库(lib),SHARED表示动态库(so) 实例 CMake常用变量说明 在外部指令中使用 ${} 进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过 ${} 取值。如果是编译,这个变量指得就是工程顶层目录,如果是编译,指的是工程编译发生的目录。另外 和

机器人梦想家 Bing Lee 3527

补充说明wxWidgets在Windows下使用CMake的配置

使用此构建方法可以直接生成一些繁琐的CMake配置,简化了CMake构建项目的工作。可以参考minimal的CMakeLists.txt文件,find_package命令使用如下如果是直接集成编译的库,CMake是不能成功构建minimal的,因为CONFIG指示CMake只查找Config模式的配置文件。没有安装上述方式的配置,只能使用这看起来就复杂不少,因为缺乏预先的配置,所以如果你使用CMake构建项目,我建议你使用上述方式的配置。

jNK13CIHK的博客 249

Cmake入门实战

本文参考: https://www.hahack.com/codes/cmake/ https://cmake.org/cmake-tutorial/ https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2019/01/22/cmake-usage.html 第一篇博客是腾讯大佬写的,是在太好了,这里特此验证转载吧,特此感谢。 ps: 本文开发环境为Typor...

我的梦 553
上一篇: Linux程序设计中,动态库/共享库(*.so)的查找方式小结
下一篇: Linux中,cmake-3.x 编译安装说明
zhawk
博客等级 码龄23年 7粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值