C ++ configura el archivo ini para modificar los parámetros en el programa sin volver a compilar el programa cada vez

Cambiar los parámetros del programa sin volver a compilar el programa.

usar archivo ini

En el archivo ini, se puede configurar en el siguiente formato:

[x_pose]
value=0.5

[y_pose]
value=0.5

[z_pose]
value=1

Entre ellos, `[x_pose]`, `[y_pose]`, `[z_pose]` son los nombres de los elementos de configuración sectiony `value` es el valor del elemento de configuración.
En el archivo cpp, puede utilizar bibliotecas de terceros como boost o la clase QSettings proporcionada por Qt para leer el archivo ini.

La biblioteca boost lee el archivo ini

Tomando la biblioteca boost como ejemplo, el archivo ini se puede leer de la siguiente manera:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <iostream>

int main()
{
    boost::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("example.ini", pt);

    float x_pose = pt.get<float>("x_pose.value");
    float y_pose = pt.get<float>("y_pose.value");
    float z_pose = pt.get<float>("z_pose.value");

    std::cout << "x_pose: " << x_pose << std::endl;
    std::cout << "y_pose: " << y_pose << std::endl;
    std::cout << "z_pose: " << z_pose << std::endl;

    return 0;
}

En el código anterior, `example.ini` es el nombre de su archivo de configuración ini, y `x_pose.value`, `y_pose.value`, `z_pose.value` son los nombres y valores de los elementos de configuración correspondientes. Ejecute el código anterior para leer los parámetros en el archivo de configuración.

Utilice Cmake para compilar el programa.

El contenido de CMakeLists.txt es el siguiente:

cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

project(lab1)

add_executable(lib main.cpp)

Luego cree la carpeta "build", abra la terminal en la carpeta, ejecute "cmake .." "make", genere el archivo ejecutable lib y ejecute "./lib". Salida de ejecución:

pose_x: 0,5
pose_y: 0,5
pose_z: 1

bailando.a库

Puede utilizar la clase de archivo INI para leer y escribir archivos de configuración INI. Los pasos específicos son los siguientes:

1. Escriba el archivo de configuración INI y escriba la ruta en el archivo de configuración. Por ejemplo, agregue lo siguiente al archivo myconfig.ini:

[Section1]
FilePath=/usr/myhome/123.txt

2. Introduzca la clase de archivo INI en el programa y lea la ruta en el archivo de configuración. Por ejemplo:
 

#include <iostream>
#include "ini/INI.h"

int main() {
    // 读取配置文件
    INIReader reader("myconfig.ini");
    if (reader.ParseError() < 0) {
        std::cout << "Failed to load ini file." << std::endl;
        return 1;
    }

    // 读取配置参数
    std::string filePath = reader.Get("Section1", "FilePath", "");

    // 打开文件并读取内容
    std::ifstream ifs(filePath);
    if (!ifs.is_open()) {
        std::cout << "Failed to open file: " << filePath << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(ifs, line)) {
        std::cout << line << std::endl;
    }

    return 0;
}

Cabe señalar que el código anterior debe importar el archivo de encabezado `INI.h` y vincular el archivo de biblioteca `libini.a` al vincularlo.

Además, si el archivo de configuración INI y el programa no están en el mismo directorio, debe especificar la ruta absoluta o relativa del archivo de configuración.

Pero la biblioteca ini no tuvo éxito en el experimento, por lo que todavía se usa la biblioteca boost:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
//读取ini配置文件,不需要需要using namespace std;
    boost::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("../example.ini", pt);

    // 读取配置参数
    std::string filePath =pt.get<string>("Section1.FilePath");

    // 打开文件并读取内容
    std::ifstream ifs(filePath);
    if (!ifs.is_open()) {
        std::cout << "Failed to open file: " << filePath << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(ifs, line)) {
        std::cout << line << std::endl;
    }

    return 0;
}

 Resumir:

El archivo ini está escrito de la siguiente manera.

[section1]

name1=value1

name2=value2

name3=value3

[section2]

name1=value1

...

Lea en el programa con la biblioteca boost:

    impulso::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("ejemplo.ini", pt);

    flotador sec1_name1 = pt.get<float>(" section1.name1");
    float sec1_name2= pt.get<float>(" section1.name2");
    float sec2_name1 = pt.get<float>(" section2. name1");

El uso de argumentos de línea de comandos o variables de entorno también es una forma común de ajustar dinámicamente los parámetros del programa sin volver a compilar el código.

Usar argumentos de línea de comando

A continuación se explica cómo utilizar argumentos de línea de comandos:

1. Defina las variables que deben configurarse dinámicamente en el programa, por ejemplo:

int myVar1 = 100;
string myVar2 = "hello";
double myVar3 = 1.23;

2. Cuando se inicie el programa, analice los argumentos de la línea de comando y utilícelos como el valor de la variable correspondiente, por ejemplo:
 

int main(int argc, char** argv) {
    // 解析命令行参数
    for (int i = 1; i < argc; i += 2) {
        if (strcmp(argv[i], "-myVar1") == 0) {
            myVar1 = atoi(argv[i+1]);
        } else if (strcmp(argv[i], "-myVar2") == 0) {
            myVar2 = argv[i+1];
        } else if (strcmp(argv[i], "-myVar3") == 0) {
            myVar3 = atof(argv[i+1]);
        }
    }

    // 程序正常执行
    // ...
}

3. Al iniciar el programa, establezca el valor de la variable correspondiente a través de los parámetros de la línea de comando, por ejemplo:

$ ./my_program.exe -myVar1 200 -myVar2 world -myVar3 3.14

utilizar variables de entorno

La forma de utilizar las variables de entorno es la siguiente:

1. Defina las variables que deben configurarse dinámicamente en el programa, por ejemplo:

int myVar1 = atoi(getenv("MY_VAR_1") ?: "100");
string myVar2 = (getenv("MY_VAR_2") ?: "hello");
double myVar3 = atof(getenv("MY_VAR_3") ?: "1.23");

2. Antes de iniciar el programa, establezca el valor del parámetro del programa configurando la variable de entorno correspondiente, por ejemplo:

$ export MY_VAR_1=200
$ export MY_VAR_2=world
$ export MY_VAR_3=3.14
$ ./my_program.exe

Cabe señalar que la forma de utilizar los parámetros de la línea de comandos o las variables de entorno debe configurarse manualmente, lo que no es conveniente para la administración. Si necesita administrar más parámetros, se recomienda utilizar el archivo de configuración.

Supongo que te gusta

Origin blog.csdn.net/weixin_56337147/article/details/130846383
Recomendado
Clasificación