Managing dependencies between projects¶
In this tutorial, you will learn how to manage dependencies between projects.
Requirements¶
We will assume you have a properly configured qiBuild worktree, and that you have managed to compile a basic project.
Overview¶
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
qiBuild in action¶
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 version="3">
<qibuild name="world" />
</project>
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 version="3" >
<qibuild name="hello">
<depends buildtime="true" runtime="true" names="world" />
</qibuild>
</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.