# qiBuild documentation

# Managing configuration files

Let’s assume the foo executable needs to read a config file named `foo.cfg`

You may want to:

- Put `foo.cfg` into version control
- Configure `foo.cfg` with CMake (maybe the contents of foo.cfg depends on whether you are on windows or on linux ...)

Also, it could be convenient if there was a unique way for the foo executable to find foo.cfg.

A possible solution is to make sure you always have the following layout:

    <prefix>
    |__ bin
        |__ foo
        etc
        |__ foo
            |__ foo.cfg

And then, to find `foo.cfg,` you just have to use `argv[0]` and it always work, whereas you just have built `foo`, or if is installed.

One way to achieve this with CMake would be to use something like this: (assuming that `foo.cfg` is in `foo/foo.cfg`)

    qi_create_bin(foo main.cpp)

    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/foo.cfg
      ${QI_SDK_DIR}/${QI_SDK_CONF}/foo/foo.cfg
      COPY_ONLY)

    qi_install_conf(foo.cfg SUBFOLDER foo)

Right before starting to build, the `foo.cfg` will be copied by CMake using `configure_file` into the correct location, and then you can add an install rule to install the file to the correct location.

Changelog CMake index Python index Index