capnproto.cpp | Qbs Manual
Description: Provides support for Cap'n Proto for the C++ language.

- Qbs Manual
- QbsModules
- capnproto.cpp
- Qbs 3.1.1

# capnproto.cpp

Provides support for Cap'n Proto for the C++ language. More...

Since: | Qbs 1.17

- List of all members, including inherited members

## Properties

- compilerName : string
- compilerPath : string
- importPaths : pathList
- outputDir : string
- useRpc : bool

## Detailed Description

The `capnproto.cpp` module provides support for generating C++ headers and sources from proto definition files using the `capnpc` tool.

A simple qbs file that uses Cap'n Proto can be written as follows:

     CppApplication {
         Depends { name: "capnproto.cpp" }
         files: ["foo.capnp", "main.cpp"]
     }

A generated header now can be included in the C++ sources:

     #include <foo.capnp.h>

     int main(int argc, char* argv[]) {
         ::capnp::MallocMessageBuilder message;

         auto foo = message.initRoot<Foo>();
         foo.setAnswer(42);
         return 0;
     }

### Relevant File Tags

Tag | Auto-tagged File Names | Since | Description
--- | --- | --- | ---
`"capnproto.input"` | `*.capnp` | 1.17.0 | Source files with this tag are considered inputs to the `capnpc` compiler.

### Dependencies

This module depends on the `capnp` module and on the `capnp-rpc` module if useRpc property is `true`. These modules are created by the Module Providers via the `pkg-config` tool.

## Property Documentation

compilerName : string

The name of the capnp binary.

Default: `"capnpc"`

compilerPath : string

The path to the protoc binary.

Use this property to override the auto-detected location.

Default: `auto-detected`

importPaths : pathList

The list of import paths that are passed to the `capnpc` tool via the `--import-path` option.

Default: `[]`

outputDir : string

The directory where the `capnpc` compiler generated files are placed.

Default: `product.buildDirectory` + "/capnp"

useRpc : bool

Use this property to enable support for the RPC framework.

A simple qbs file that uses rpc can be written as follows:

     import qbs.Host

     Project {
         CppApplication {
             Depends { name: "capnproto.cpp"; required: false }
             name: "server"
             condition: capnproto.cpp.present && qbs.targetPlatform === Host.platform()
             consoleApplication: true
             capnproto.cpp.useRpc: true

             files: [
                 "calculator.capnp",
                 "calculator-server.cpp"
             ]
         }
         CppApplication {
             Depends { name: "capnproto.cpp"; required: false }
             name: "client"
             condition: capnproto.cpp.present && qbs.targetPlatform === Host.platform()
             consoleApplication: true
             capnproto.cpp.useRpc: true

             files: [
                 "calculator.capnp",
                 "calculator-client.cpp"
             ]
         }
     }

Default: `false`