当前位置: 首页 > news >正文

cmake 之add_definitions使用误区

需求

需要实现,在cmake中定义宏定义,可以:
1) 在code中可以使用;
2) 在cmake中可以识别是否已定义

问题

宏定义,cmake有add_definitions函数,直观的实现方法如下。

cmake_minimum_required(VERSION 3.13)
project(main)# 定义宏
add_definitions(-DMY_MACRO)# 判断宏是否存在
if(DEFINED MY_MACRO)message(STATUS "MY_MACRO已定义")
else()message(STATUS "MY_MACRO未定义")
endif()

定义宏后,上述要求的第1)条正常使用,但是第2)条始终提示没有定义改宏定义。
ChatGPT也识别不到这个错误,甚至还会给一个错误的demo example。
后来查找cmake官网,才找到原因,原来宏定义Macro并不是变量variables,不支持通过if()这样的方法判断。
https://cmake.org/cmake/help/latest/command/if.html#defined


可能宏定义的在cmake解析CMakeLists.txt时候并没有生成,而是在make的时候才会生成。

解决方法

一个间接的实现方式如下:

cmake_minimum_required(VERSION 3.13)
project(main)# 设置变量
set(MY_MACRO FORCE)# 判断变量的值并定义宏
if(DEFINED MY_MACRO)add_definitions(-DMY_MACRO)message(STATUS "MY_MACRO已定义")
else()message(STATUS "MY_MACRO未定义")
endif()
http://www.lryc.cn/news/222863.html

相关文章:

  • Leetcode—515.在每个树行中找最大值【中等】
  • 安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现
  • element 弹窗浏览器后退-遮照层还存在问题 以及跟vue keep-alive冲突
  • C++(Qt)软件调试---自动注册AeDebug(17)
  • 云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6
  • Java2 - 数据结构
  • 精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘
  • 云存储/视频监控管理平台EasyCVR,使用sqlite数据库出现卡顿该如何优化?
  • 实战!工作中常用的设计模式
  • MySQL进阶_1.逻辑架构和SQL执行流程
  • 基于GCC的工具objdump实现反汇编
  • 排序算法的空间复杂度和时间复杂度
  • 【电路笔记】-基尔霍夫电路定律
  • 从零开始搭建React+TypeScript+webpack开发环境-基于axios的Ajax请求工具
  • 【uniapp小程序下载】调用uni.uploadfile方法在调试工具里是没有问题的,但是线上版本和体验版就调用不成功,真机调试也没问题
  • chatGLM中GLM设计思路
  • 卡牌游戏类型定制开发微信卡牌小程序游戏
  • web —— css(1)
  • 站群服务器的特性和好处是什么
  • 竞赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python
  • 软件设计模式的意义
  • vue基础知识十八:说说你对keep-alive的理解是什么?
  • Linux CentOS配置阿里云yum源
  • ESP32网络开发实例-Web服务器以仪表形式显示传感器计数
  • @Bean有哪些属性
  • 【Qt之绘制兔纸】
  • JS+CSS随机点名详细介绍复制可用(可自己添加人名)
  • 西瓜书笔记
  • 学算法常用刷题网站
  • hdlbits系列verilog解答(always块条件语句)-37