Как включить файл / объект JSON в C ++ во время сборки - PullRequest
0 голосов
/ 22 марта 2019

У меня есть JSON-файл с конфигурацией среды базы данных, который называется env-config.json следующим образом:

{
"LATEST":{
"DB_DATABASE":"databasename",
"DB_HOST":"hosturl",
"DB_PORT":"3306",
"DB_USER":"root",
"POOL_MAX":1
},
"PROD":{
"DB_DATABASE":"databasename",
"DB_HOST":"hosturl",
"DB_PORT":"3306",
"DB_USER":"root",
"POOL_MAX":1
}
}

находится в корне исходного кода проекта c ++

, поэтому я хочупросто коснитесь этой конфигурации в формате json, но используйте ее из моего скомпилированного кода на C ++, например

, когда программа выполняет запрос к системе, что такое среда, например,

system.getEnvironment()

система говорит "PROD "

в этот момент вызовите этот файл JSON и извлеките информацию для использования в программе.

проблема в том, что мне нужен метод для распространения json вместе с конечным исполняемым файлом iне может иметь двоичный файл и файл json в отдельных файлах.

я пытаюсь с:

file (STRINGS "env-config.json" CONFIG)

add_definitions (-DENV_CONFIG=${CONFIG})

и после этого использую эту строку в программе, но проблема в том, что происходит сбой cmake, потому чтовсе scapes из json, да, я могу поместить json в строковый формат с большим количеством \ n и scapes, но я потеряю формат json с готовностью читаем.

Так что, например, возможно иметь мой файл json intact в формате json и во время сборки cmake преобразует его в строку и после этого использует

file (STRINGS "env-config.json" CONFIG)

add_definitions (-DENV_CONFIG=${CONFIG})

или, если это так сложно, потому что формат JSON

можно использовать файл свойств, такой как java

db - $ {env} .properties

с этим содержимым

db.database.name = mydatabasename
db.database.url = myurl
db.database.user = root
db.database.password = root

и включите его вместе в исполняемый файл, как в MAP внутри класса config или struct

Большое спасибо!

1 Ответ

0 голосов
/ 22 марта 2019

Я либо неправильно понимаю ваш вариант использования, либо вы упускаете важный момент, касающийся включения файла во время сборки.

Смысл наличия файла конфигурации JSON, если я правильно понимаю, относится к системеадминистраторы, чтобы иметь возможность настроить приложение в любое время.Однако внедрение файла JSON в приложение во время сборки означает, что он будет запекаться в исполняемом двоичном файле навсегда. Единственный способ внесения изменений в файл JSON - это перестроить приложение заново.

Если это то, что вы хотите, я бы предложил упростить вашу жизнь и выполнить настройку.файл заголовка, который вы можете просто включить в свой исходный код (вместо JSON), подобный следующему:

config.h

#define LATEST_DB_DATABASE "databasename"
#define LATEST_DB_HOST     "hosturl"
#define LATEST_DB_PORT     3306
#define LATEST_DB_USER     "root"
#define LATEST_POOL_MAX    1

#define PROD_DB_DATABASE   "databasename",
#define PROD_DB_HOST       "hosturl"
#define PROD_DB_PORT       3306
#define PROD_DB_USER       "root"
#define PROD_POOL_MAX      1

Если это невозможнозатем вам нужно написать скрипт сборки на любом языке, который читает файл JSON и преобразует его в файл заголовка, аналогичный показанному, и этот заголовок включается в исходный код и компилируется с ним.

Однако,если вы не хотите включать файл JSON во время сборки, тогда вам понадобится библиотека JSON, написанная на C, для чтения файла конфигурации во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...