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.