基于libconfig進(jìn)行配置文件解析 (qq.com)
準(zhǔn)備
官網(wǎng)
https://hyperrealm.github.io/libconfig/
源碼
git clone https://github.com/hyperrealm/libconfig.git
在自己工程中使用
這里基于VS2022,其他環(huán)境類似。
庫方式
打開libconfig\\libconfig_vs2017.sln
點(diǎn)擊左側(cè)工程目錄解決方案
菜單欄 生成->生成解決方案
生成的庫文件位于libconfig\\build\\x64下的
libconfigd.lib
libconfigd.dll
還有一些測試程序
比如命令行下./c_example1d.exe可以運(yùn)行測試程序
在自己的工程目錄添加libconfig文件夾,添加inc和lib子目錄
將libconfigd.lib
libconfigd.dll
復(fù)制到lib目錄下
將源碼路徑libconfig\\lib下所有的h文件復(fù)制到自己的inc目錄下
右鍵點(diǎn)擊工程名->屬性
設(shè)置頭文件包含路徑
$(MSBuildProjectDirectory)\\Src\\libconfig\\inc;
設(shè)置庫文件包含路徑
$(MSBuildProjectDirectory)\\Src\\libconfig\\lib;
設(shè)置鏈接的庫
測試代碼
#include < stdio.h >
#include < stdlib.h >
#include < libconfig.h >
#include "param_cfg.h"
int main(int argc, char** argv)
{
config_t cfg;
config_setting_t* setting;
int version;
int pid;
int vid;
config_init(&cfg);
/* 讀配置文件. */
if (!config_read_file(&cfg, "wq.cfg"))
{
fprintf(stderr, "%s:%d - %s\\n", config_error_file(&cfg),
config_error_line(&cfg), config_error_text(&cfg));
config_destroy(&cfg);
return(EXIT_FAILURE);
}
/* 獲取版本信息. */
if (config_lookup_int(&cfg, "version", &version))
printf("version: %d\\n\\n", version);
else
fprintf(stderr, "No 'version' setting in configuration file.\\n");
/* Output a list of all books in the inventory. */
setting = config_lookup(&cfg, "id");
if (setting != NULL)
{
config_setting_lookup_int(setting, "pid", &pid);
config_setting_lookup_int(setting, "vid", &vid);
}
printf("pid=%#x;vid=%#x\\r\\n",pid,vid);
config_destroy(&cfg);
return(EXIT_SUCCESS);
}