In this tutorial, you will learn how to manage dependencies between projects.
We will assume you have a properly configured qiBuild worktree, and that you have managed to compile a basic project.
Please make sure you have follow the getting started tutorial.
We are going to create two separate projects: hello and world, where hello depends on the compiled library found in world.
The world project contains sources to build a dynamic library (libworld.so or world.dll)
The hello project contains source to build an executable named hello which depends on the world library.
It also contains a small test that simply tries to launch hello.
The sources of this example can be found here: helloworld.zip
Extract the archive in your qiBuild worktree, you should end up with something looking like:
.qi
|__ qibuild.xml
world
|__ qiproject.xml
|__ CMakeLists.txt
|__ world
|__ world.hpp
|__ world.cpp
hello
|__ qiproject.xml
|__ CMakeLists.txt
|__ main.cpp
Configuring and building the hello project is as easy as
$ qibuild configure hello
$ qibuild make hello
$ qibuild test hello
For this to work, you only have to write two qiproject.xml files
The first one in QI_WORK_TREE/world/qiproject.xml simply tells qibuild that there is a project named world in QI_WORK_TREE/world
<project name="world" />
The second one in QI_WORK_TREE/hello tells qibuild there is a project named hello in QI_WORK_TREE/hello, and that it depends on the world project:
<project name="hello">
<depends buildtime="true" runtime="true"
name="world"
/>
</project>
You can see that configuring hello caused the world project to be configured too, and that building hello also built the world project.
On Windows, the world DLL was copied right next to hello.exe, so running qibuild test hello just worked.
If you are using Visual Studio, you can open hello.sln in QI_WORK_TREE/hello/build-.../hello.sln, select “hello” as startup project, and start debugging hello_d.exe right away.
Warning
If you try to compile hello in release, you’ll get an error because “world” has not been compiled in release, so world.lib could not found.
Simply run
$ qibuild configure --release world
$ qibuild make --release world
And try again.