首页 > 解决方案 > 将 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转换ONtrue,反之亦然,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 为我进行转换?

标签: jsonstringcmakeboolean

解决方案


推荐阅读