|
libqi
1.14
|
go to the qi::path API reference.
The main idea of the qibuild-based project is that you always end up with the same layout.
For instance, right after having built you project, you end up with a directory looking like this:
Here we assume you have a foo executable which:
bar dynamic libraryfoo.data foo.cfg src
|__ foo
|__ data
|___ foo.data
|__ etc
|__ foo.cfg
build
|___
sdk
|__ lib
|___ libbar.so
|__ bin
|__ fooWhen everything is installed, you have something like:
prefix
|__ lib
|__ libbar.so
|__ bin
|__ foo
|__ share
|__ foo
|__ foo.data
|__ etc
|__ foo
|__ foo.cfgHere is a list of common requirements:
foo/foo.cfg, foo/foo.data in a clean, simple way, while making sure the solution works whereas the project is built or installedfoo may need to write or update its configuration files or data but we need to make sure nothing will be written inside the installed directoryfoo.cfg files, we need to be able to process then in a correct order.Here is how it works:
/path/to/build/sdk, when something is installed, the prefix is the DESTDIR plus the installation prefix.Then we make sure the layout in the build prefix and in the install prefix is always the same. For instance, we will have CMake rules to be sure that whenever the foo project is configured, a copy of foo.cfg is placed in build/sdk/foo/foo.cfg (same thing for data)
argv0. For instance, if argv0 is /path/to/build/sdk/bin/foo, we can assume the prefix is /path/to/build/sdk.qi::path documentation.
The API of qi::path always make sure that:
For this to work, we must make sure that
Have a look on the API of qi::path for more details
Writing a configuration file is very different from reading one.
Let's assume the foo executable want to make sure that SPAM=42 in foo.cfg.
Here is how it works:
foo.cfg foo.cfg is foundfoo.cfg filefoo.cfg file.You can see that we ask for a list of paths when reading, but that we always write to one file.
Let's go through these steps again, assuming foo is installed in /usr/bin/foo, and foo.cfg in /usr/share/foo/foo.cfg, and that there is nothing else on the machine where foo is running.
foo.cfg using qi::path::getConfigurationPaths [~/.config/foo/foo.cfg, /usr/share/foo/foo.cfg] .config/foo/foo.cfg does not exist, we read /usr/share/foo/foo.cfg SPAM=42 to ~/.config/foo/foo.cfgThen each time a piece of code will ask for the foo.cfg path, it will get a list starting with ~/.config/foo/foo.cfg, so we are sure the setting SPAM=42 will be used.
qi::path documentation.