CMake 设置开关选项

简介: CMake 设置开关选项用于启用或弃用某一部分功能

CMake 设置开关选项

有时候为了方便调试,方便条件式的构建工程项目,则可在 CMakeLists.txt 文件中添加开开关选项,并将一系列如自定义的宏定义,和构建或者不构建的工程写入其中,这样仅通过修改 CMakeLists.txt 文件中的指定开关选项,则可 cmake 构建 便捷开关管理一些列的自定义选项。

常使用 option 命令,它的语法如下:

option(<variable> "<help_text>" [value])

option 中的三个参数,

  • <variable> 表示变量名
  • "<help_text>" 表示帮助信息,如解释这个自定义的变量的用途
  • [value] 则表示此变量的值,如设置为 ON 或者 OFF

注:对于为 [value] 设置的所有非 ON 的值均被视作 OFF 来处理。

示例
如创建选项 PRINT_INFO,在选项启用时用输出消息并添加预处理宏定义 PRINT_INFO ,这样在代码中我们就可以通过判断宏定义来开关我们的调试打印。

CMakeLists.txt 中

option(PRINT_INFO "print debug info" ON)

if (PRINT_INFO)
    message("option PRINT_INFO is on")
    add_definitions(-DPRINT_INFO)  
endif()

代码中

#ifdef PRINT_INFO
#define LOG(info) std::cout << "[" << __func__ << "]:" << __LINE__ << info << std::endl
#else
#define LOG(info)
#endif

void MyFunction(MyStruct* stru)
{
   
    if (!stru)
    {
   
        LOG("stru is nullptr.");
        return;
    }
    // ...
}

这样就可以通过 CMakeLists.txt 文件中 PRINT_INFO 选项的 ONOFF 来控制 C++ 的条件编译。


参考链接

目录
相关文章
|
6月前
|
运维 Prometheus 监控
别再靠“运维小哥半夜报警”了!大模型搞定实时事件监测!
别再靠“运维小哥半夜报警”了!大模型搞定实时事件监测!
429 15
|
9月前
|
Linux API
Linux下载工具wget与curl
`wget` 是一个用于从网络下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。它能自动处理下载中断,并支持递归下载网站内容。基本用法:`wget URL`,可指定文件名(`-O`)、保存目录(`-P`),还支持断点续传(`-c`)、限速(`--limit-rate`)和递归下载(`-r`)。相比之下,`curl` 更侧重于发送各种HTTP请求(如GET、POST),并支持文件上传、自定义请求头和cookie等功能。
306 10
|
安全 NoSQL Shell
pocsuite3 工具使用
pocsuite3 工具使用
289 1
|
机器学习/深度学习 运维 算法
「AIGC算法」K-means聚类模型
**K-means聚类模型概览:** - 是无监督学习算法,用于数据集自动分组。 - 算法步骤:初始化质心,分配数据点,更新质心,迭代直至收敛。 - 关键点包括K的选择、初始化方法、收敛性和性能度量。 - 优点是简单快速,适合大样本,但对初始点敏感,需预设K值,且仅适于球形簇。 - 应用场景包括图像分割、市场分析、异常检测等。 - 示例展示了使用scikit-learn对Iris数据集和自定义CSV数据进行聚类。
584 0
「AIGC算法」K-means聚类模型
|
设计模式 开发者 Python
Python中循环依赖问题及其解决方案
循环依赖是 Python 开发中需要特别注意的问题。通过重新设计模块结构、延迟导入、依赖注入、利用 Python 的动态特性以及代码重构等方法,可以有效地解决循环依赖问题。这些策略不仅有助于提高代码的可维护性和可读性,还能避免潜在的运行时错误。在实际开发中,开发者应该根据具体情况选择合适的解决方案。
|
存储 程序员 Python
Python类属性与实例属性详解
Python 中区分类属性和实例属性的设计是为了满足不同的需求和使用场景。这种区分使得代码更加灵活、清晰,并且能够提供更好的封装性和可维护性。类属性用于表示与整个类相关的数据,而实例属性则用于表示每个实例的特定信息。这样,我们可以将关注点分离开来,使得代码更易于理解、维护和扩展。在实际应用中,我们可以根据具体的情况,选择适当的属性类型来组织和管理代码。
353 1
|
机器学习/深度学习 自然语言处理 算法
必知的技术知识:IK分词器实现原理剖析——一个小问题引发的思考
必知的技术知识:IK分词器实现原理剖析——一个小问题引发的思考
480 0
|
缓存
华为openEuler(EulerOS)系统 设置yum源
华为openEuler(EulerOS)系统 设置yum源
6893 0
华为openEuler(EulerOS)系统 设置yum源
|
C语言 定位技术 存储
【C语言基础入门】二级指针、一维数组与指针、二维数组与指针
【C语言基础入门】二级指针、一维数组与指针、二维数组与指针
399 0
【C语言基础入门】二级指针、一维数组与指针、二维数组与指针
|
容器
彻底理解游戏世界中的两个坐标系
彻底理解游戏世界中的两个坐标系
537 0