Managing build configurations¶
In this tutorial, you will learn how to use several build configurations with the same sources.
Let’s say you have a
foo library, with some tests. You want to make the
compilation of the tests optional (because they depend on
gtest, and you do not
want to force your users to have
A standard CMake way to do it would be:
option(WITH_GTEST "Enable compilation of unit tests" OFF) if(WITH_GTEST) find_package(GTest Required) # ... add_test(...) else() # ... endif()
So far so good.
But now you have to pass “-DWITH_GTEST=ON” to all your projects when you configure them.
Note that there is a shortcut for that in qibuild CMake API using
qi_add_optional_package(GTEST) if(GTEST) # .... else() # ... endif()
Here, if GTEST is not found, no error is raised, and WITH_GTEST is simply set to “OFF”...
But let’s assume you really need some flags.
Passing CMake flags with qiBuild¶
There are several ways to pass CMake flags to a project managed by qiBuild, in ascending priority:
- Just once
$ qibuild configure foo -DWITH_GTEST=ON
You may want to trigger some flags depending on the toolchain / configuration you use.
For instance, if you want to pass
-DWITH_FOO=OFFwhen you are using the toolchain mingw32, you can write something like:
set(WITH_FOO OFF CACHE INTERAL "" FORCE)
Using build configurations¶
qiBuild also lets you to have different settings depending on the toolchain you use.
The config file will always be found in
For instance, you could have on a windows machine:
<qibuild version="1"> <defaults> <!-- some defaults --> </defaults> <config name="mingw32"> <cmake generator="MinGW Makefiles" /> <env path="c:\MinGW\bin" /> </config> <config name="win32-vs2010"> <cmake generator="Visual Studio 10" /> </config> </qibuild>