diff options
Diffstat (limited to 'tutorial/chapter-6')
-rw-r--r-- | tutorial/chapter-6/app/app.qbs | 6 | ||||
-rw-r--r-- | tutorial/chapter-6/app/main.c | 10 | ||||
-rw-r--r-- | tutorial/chapter-6/lib/lib.c | 10 | ||||
-rw-r--r-- | tutorial/chapter-6/lib/lib.h | 8 | ||||
-rw-r--r-- | tutorial/chapter-6/lib/lib.qbs | 9 | ||||
-rw-r--r-- | tutorial/chapter-6/lib/lib_global.h | 18 | ||||
-rw-r--r-- | tutorial/chapter-6/myproject.qbs | 35 | ||||
-rw-r--r-- | tutorial/chapter-6/qbs/imports/MyApplication.qbs | 23 | ||||
-rw-r--r-- | tutorial/chapter-6/qbs/imports/MyAutoTest.qbs | 3 | ||||
-rw-r--r-- | tutorial/chapter-6/qbs/imports/MyLibrary.qbs | 18 | ||||
-rw-r--r-- | tutorial/chapter-6/test/test.c | 18 | ||||
-rw-r--r-- | tutorial/chapter-6/test/test.qbs | 5 |
12 files changed, 163 insertions, 0 deletions
diff --git a/tutorial/chapter-6/app/app.qbs b/tutorial/chapter-6/app/app.qbs new file mode 100644 index 000000000..84c2430e4 --- /dev/null +++ b/tutorial/chapter-6/app/app.qbs @@ -0,0 +1,6 @@ +MyApplication { + Depends { name: "mylib" } + name: "My Application" + targetName: "myapp" + files: "main.c" +} diff --git a/tutorial/chapter-6/app/main.c b/tutorial/chapter-6/app/main.c new file mode 100644 index 000000000..a560d1ba1 --- /dev/null +++ b/tutorial/chapter-6/app/main.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +#include "lib.h" + +int main() +{ + printf("Hello, world\n"); + printf("%s\n", get_string()); + return 0; +} diff --git a/tutorial/chapter-6/lib/lib.c b/tutorial/chapter-6/lib/lib.c new file mode 100644 index 000000000..5dcae0de3 --- /dev/null +++ b/tutorial/chapter-6/lib/lib.c @@ -0,0 +1,10 @@ +#include "lib.h" + +#ifndef CRUCIAL_DEFINE +# error CRUCIAL_DEFINE not defined +#endif + +const char *get_string() +{ + return "Hello from library"; +} diff --git a/tutorial/chapter-6/lib/lib.h b/tutorial/chapter-6/lib/lib.h new file mode 100644 index 000000000..ef39ca4a1 --- /dev/null +++ b/tutorial/chapter-6/lib/lib.h @@ -0,0 +1,8 @@ +#ifndef LIB_H +#define LIB_H + +#include "lib_global.h" + +MYLIB_EXPORT const char *get_string(); + +#endif // LIB_H diff --git a/tutorial/chapter-6/lib/lib.qbs b/tutorial/chapter-6/lib/lib.qbs new file mode 100644 index 000000000..7c303c8aa --- /dev/null +++ b/tutorial/chapter-6/lib/lib.qbs @@ -0,0 +1,9 @@ +MyLibrary { + name: "mylib" + files: [ + "lib.c", + "lib.h", + "lib_global.h", + ] + cpp.defines: base.concat(['CRUCIAL_DEFINE']) +} diff --git a/tutorial/chapter-6/lib/lib_global.h b/tutorial/chapter-6/lib/lib_global.h new file mode 100644 index 000000000..76cce8d36 --- /dev/null +++ b/tutorial/chapter-6/lib/lib_global.h @@ -0,0 +1,18 @@ +#ifndef LIB_GLOBAL_H +#define LIB_GLOBAL_H + +#if defined(_WIN32) || defined(WIN32) +#define MYLIB_DECL_EXPORT __declspec(dllexport) +#define MYLIB_DECL_IMPORT __declspec(dllimport) +#else +#define MYLIB_DECL_EXPORT __attribute__((visibility("default"))) +#define MYLIB_DECL_IMPORT __attribute__((visibility("default"))) +#endif + +#if defined(MYLIB_LIBRARY) +#define MYLIB_EXPORT MYLIB_DECL_EXPORT +#else +#define MYLIB_EXPORT MYLIB_DECL_IMPORT +#endif + +#endif // LIB_GLOBAL_H diff --git a/tutorial/chapter-6/myproject.qbs b/tutorial/chapter-6/myproject.qbs new file mode 100644 index 000000000..86537af23 --- /dev/null +++ b/tutorial/chapter-6/myproject.qbs @@ -0,0 +1,35 @@ +//! [0] +Project { + property string version: "1.0.0" + property bool installDebugInformation: true + property bool withTests: false + property stringList autotestArguments: [] + property stringList autotestWrapper: [] + + name: "My Project" + minimumQbsVersion: "2.0" + // ... + //! [0] + references: [ + "app/app.qbs", + "lib/lib.qbs", + ] + qbsSearchPaths: "qbs" + + //! [1] + SubProject { + filePath: "test/test.qbs" + Properties { + condition: parent.withTests + } + } + //! [1] + + //! [2] + AutotestRunner { + condition: parent.withTests + arguments: parent.autotestArguments + wrapper: parent.autotestWrapper + } + //! [2] +} diff --git a/tutorial/chapter-6/qbs/imports/MyApplication.qbs b/tutorial/chapter-6/qbs/imports/MyApplication.qbs new file mode 100644 index 000000000..875bc10f3 --- /dev/null +++ b/tutorial/chapter-6/qbs/imports/MyApplication.qbs @@ -0,0 +1,23 @@ +import qbs.FileInfo + +//! [0] +CppApplication { + version: project.version + consoleApplication: true + install: true + installDebugInformation: project.installDebugInformation + // ... + //! [0] + + cpp.rpaths: { + if (!cpp.rpathOrigin) + return []; + return [ + FileInfo.joinPaths( + cpp.rpathOrigin, + FileInfo.relativePath( + FileInfo.joinPaths("/", product.installDir), + FileInfo.joinPaths("/", "lib"))) + ]; + } +} diff --git a/tutorial/chapter-6/qbs/imports/MyAutoTest.qbs b/tutorial/chapter-6/qbs/imports/MyAutoTest.qbs new file mode 100644 index 000000000..ba420e4d2 --- /dev/null +++ b/tutorial/chapter-6/qbs/imports/MyAutoTest.qbs @@ -0,0 +1,3 @@ +MyApplication { + type: base.concat(["autotest"]) +} diff --git a/tutorial/chapter-6/qbs/imports/MyLibrary.qbs b/tutorial/chapter-6/qbs/imports/MyLibrary.qbs new file mode 100644 index 000000000..ef27bf57b --- /dev/null +++ b/tutorial/chapter-6/qbs/imports/MyLibrary.qbs @@ -0,0 +1,18 @@ +DynamicLibrary { + version: project.version + install: true + installDebugInformation: project.installDebugInformation + + Depends { name: 'cpp' } + property string libraryMacro: name.replace(" ", "_").toUpperCase() + "_LIBRARY" + cpp.defines: [libraryMacro] + cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined + + Export { + Depends { name: "cpp" } + cpp.includePaths: [exportingProduct.sourceDirectory] + } + + Depends { name: 'bundle' } + bundle.isBundle: false +} diff --git a/tutorial/chapter-6/test/test.c b/tutorial/chapter-6/test/test.c new file mode 100644 index 000000000..1fef24685 --- /dev/null +++ b/tutorial/chapter-6/test/test.c @@ -0,0 +1,18 @@ +#include "lib.h" + +#include <stdio.h> +#include <string.h> + +int main(int argc, char *argv[]) +{ + if (argc > 2) { + printf("usage: test [value]\n"); + return 1; + } + const char *expected = argc == 2 ? argv[1] : "Hello from library"; + if (strcmp(get_string(), expected) != 0) { + printf("text differs\n"); + return 1; + } + return 0; +} diff --git a/tutorial/chapter-6/test/test.qbs b/tutorial/chapter-6/test/test.qbs new file mode 100644 index 000000000..1e911da47 --- /dev/null +++ b/tutorial/chapter-6/test/test.qbs @@ -0,0 +1,5 @@ +MyAutoTest { + Depends { name: "mylib" } + name: "mytest" + files: "test.c" +} |