c++ - 在 CMake 中实现条件 FORCE
问题描述
我已经实现了一个方案,它允许我检测MY_VAR
用户是否更改了 CACHE 变量,就像这里建议的那样。由于存在许多依赖关系,我没有在单个因变量上强制使用新值,而是引入了一个新变量MY_VAR_CHANGED
。要定义因变量,可以执行以下操作:
if( MY_VAR_CHANGED )
set( DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH "" FORCE )
else()
set( DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH "" )
endif()
我在许多不同的地方使用这段代码,所以我想知道是否有一种优雅的方式来有条件地包装 FORCE,例如通过使用类似于? :
c++ 中的语句的东西。
解决方案
CMake 缺少许多与“内联”计算相关的功能。相反,您可以始终创建所需的宏/函数封装行为:
# Straightforward macro, which removes code duplicates
macro(set_force_conditional cond_var)
if(${cond_var})
set(${ARGV} "" FORCE)
else()
set(${ARGV} "")
endif()
endmacro()
用法:
set_force_conditional(MY_VAR_CHANGED DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH)
(普通变量的取消引用会丢失元素,因此宏手动""
将空文档字符串传递给命令)。set(CACHE)
推荐阅读
- python-3.x - Mapreduce 代码正在运行但未提供所需的输出
- python - 如何使用python将jpg存储在sqlite数据库中
- javascript - 获取 HTML/DOM 的所有元素的 XPATH
- python - 在 wordpress 上运行 python 编写的 .exe 文件
- ffmpeg - FFMPEG:avcodec_send_packet(); 使用多线程时出错
- aem - javax.jcr.version.VersionException:无法设置属性。节点已签入
- python - 如何在 Luigi 中创建单例任务?
- firefox - 无法打开共享对象文件:没有这样的文件或目录 无法加载 XPCOM
- android - HDMI-CEC Android TV 关闭电视
- javascript - 单击位于其中的按钮时,如何防止数据切换崩溃?