# qiBuild documentation

# 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.

Changelog CMake index Python index Index