json - 将 CMake BOOL 变量的值转换为其 JSON 表示
问题描述
我有以下 JSON CMake 配置文件:
项目.json.in
{
"logging" : @CONFIG_PARAM_ENABLE_LOGGING@
}
相应的CMakeLists.txt条目如下所示:
CMakeLists.txt
set(CONFIG_PARAM_ENABLE_LOGGINGON BOOL "Enable generating and showing log messages")
configure_file(project.json.in project.json)
输出文件如下所示(变量设置为ON
):
项目.json
{
"logging" : ON
}
想要的输出是:
项目.json
{
"logging" : true
}
我可以STRING
为变量使用一个类型,但是在配置过程中它不会显示为复选框,而且我必须处理有人输入与 和 不同的字符串值的true
可能性false
。
我还可以通过使用 and 语句CMakeLists.txt
转换ON
为true
,反之亦然,if...else
从而能够保留BOOL
类型,从而在我的值中添加一些处理。当然,这里的缺点是我必须为要用于最终 JSON 文件的每个布尔变量调用该函数。目前我想出了以下CMake代码:
CMakeLists.txt
function(cmake_to_json_bool var val)
message(TRACE "Converting boolean value of ${var} = ${val} to string")
if(${val})
set(${var} "true" PARENT_SCOPE)
else()
set(${var} "false" PARENT_SCOPE)
endif()
endfunction()
set(CONFIG_PARAM_ENABLE_LOGGINGON BOOL "Enable generating and showing log messages")
cmake_to_json_bool(CONFIG_PARAM_ENABLE_LOGGINGON ${CONFIG_PARAM_ENABLE_LOGGINGON})
configure_file(project.json.in project.json)
在没有太多开销的情况下,哪种方法更适合解决这种情况?是否有一种“自动”的方式告诉 CMake 为我进行转换?
解决方案
推荐阅读
- python - 如何从python中的数组中删除引号
- javascript - 用于纯 Javascript 文件的 Vscode Eslint
- javascript - 为什么在使用 redux 时,这两种情况下的 react 渲染会不同?
- php - 显示已选中复选框的选中图标(刻度)。| 拉拉维尔 | (复选框,如在 WordPress 中)
- python - Azure 功能无法纵向扩展
- javascript - 映射时从数组中删除重复项
- powershell - 将列添加到 Powershell 显示输出
- angular - 当我有来自拦截器的不同标头时,角度标头不会添加到特定请求中
- python-3.x - 在 Ubuntu 20.04 LTS 上使用 Python 3.x 在 VS Code 中无法解析 Pylance (reportMissingImports) 导入“Path.to.own.script”
- excel - 从一张纸复制数据并在另一张纸上替换