用CMake解析配置文件(.ini或.cfg)来创建头文件



在CMake教程https://cmake.org/cmake/help/latest/guide/tutorial/A%20Basic%20Starting%20Point.html#adding-a-version-number-and-configured-header-file中,我们可以设置几个变量,然后使用模板文件(*. In)生成头文件。例如:

# CMakeLists.txt
cmake_minimum_required (VERSION 3.6)
project (Tutorial)
set (MY_VAR_1 1)
set (MY_VAR_2 2)
set (MY_VAR_3 3)
configure_file (
"${PROJECT_SOURCE_DIR}/tutorial.h.in"
"${PROJECT_BINARY_DIR}/tutorial.h"
)
// tutorial.h.in
#define MY_VARS_1 @MY_VARS_1@
#define MY_VARS_2 @MY_VARS_2@
#define MY_VARS_3 @MY_VARS_3@

运行mkdir build && cmake ..将生成带有声明变量的tutorial.h。到目前为止一切顺利。

如果我的应用程序有很多变量,我想在。ini或。cfg文件中定义参数,而不是在CMakeLists.txt中。如何用CMake解析配置文件?

在CMake 3.19中出现了使用string命令从字符串解析JSON的功能。

假设你的配置文件是"config.json"在与"cmakelists .txt"文件,包含如下内容:

{
"project": {
"version": "3.2.1",
"dependencies": {
"boost": "1.77",
"openssl": "1.1"
}
}
}

你可以这样做来解析它:

file(READ "${CMAKE_CURRENT_LIST_DIR}/config.json" config_json)
string(JSON project_version GET "${config_json}"
project version)
string(JSON boost_version GET "${config_json}"
project dependencies boost)
string(JSON openssl_version GET "${config_json}"
project dependencies openssl)
message(STATUS "Project version is ${project_version}")
message(STATUS "Boost version is ${boost_version}")
message(STATUS "OpenSSL version is ${openssl_version}")

输出:

-- Project version is 3.2.1
-- Boost version is 1.77
-- OpenSSL version is 1.1

最新更新