Julien's Blog

 

Guten Tag, allerseits!

Wie der Titel schon andeutet, bin ich wieder da. In den letzten paar Monaten habe
ich mich auf mein Abitur konzentriert und konnte deshalb keine weiteren Artikel
verfassen. Jetzt ist aber die ‚Abi‘-Pause vorbei.

Was bedeutet das für den Blog? Ganz einfach: Es werden jetzt endlich wieder neue
Artikel verfasst. Meine C#-DirectX 11 Serie werde ich natürlich auch weiterführen.
Am 24.06 werde ich eine überarbeitete Version des letzten Posts veröffentlichen.
Dies ist nötig, da sich die SharpDX-Library mit der Version 3 geändert hat.

Abgesehen davon habe ich noch einen Artikel geplant, der zeigt, wie man das ‚Event‘-Keyword, welches man es aus C# kennt, in C++ simulieren kann.

Bis dahin wünsche ich euch eine schöne Woche 🙂

Qbs: One buildsystem to rule ‚em all!

Müsste man heutzutage ein englisches Statement zu den gängigen Buildsystemen für C++ verfassen, dann würde dieses wahrscheinlich wie folgt lauten:

Many, and they’re awful.

Dies kann ich aus meiner persönlichen Erfahrung auch bestätigen.
„Many“, da anscheinend jedes größere Open Source Projekt ein eigenes Tool braucht.
„awful“, da ich kaum eines wirklich produktiv nutzen konnte, ohne dabei simultan den Glauben an die IT-Zukunft zu verlieren.
Beim momentanen Platzhirsch „CMake“ habe ich zum Beispiel nie die Skriptsprache nachvollziehen können. „SCons“ zum Beispiel habe ich nie zum Laufen bekommen, da dieses Tool anscheinend nur Visual Studio 2008 und ältere Compiler kennt.
Probleme der Art haben dafür gesorgt, dass ich die meisten Tools nur probiert aber nie genutzt habe.

Die Entwickler hinter dem Qt-Projekt haben dies anscheinend bemerkt und 2013 ein neues Tool veröffentlicht, nämlich die „Qt Build Suite“ (kurz: Qbs).
Als Skriptsprache wird QML genutzt. Das Programm lässt sich auch mit jedem erdenklichen C++-Compiler nutzen.
Zuletzt wurde Support für das Android NDK hinzugefügt.

Der Worte sind genug gewechselt,
Laßt mich auch endlich Taten sehn! – Faust, Goethe

Beispiel 1: Hello, World!
Ich muss zugeben, dies ist ein ziemlich simples Beispiel, aber es gibt einen ersten Eindruck.

// Hello.cpp
#include <iostream>

int main(){
std::cout << "Hello, World!" << std::endl;
return 0;
}

Das Buildskript dazu könnte so aussehen:

// Hello.qbs
import qbs 1.0

Application{

name: "HelloWorld"
files: "Hello.cpp"
Depends{ name: "cpp" }

}

Unser Superprogramm können wir jetzt mit einem einfachen Kommandonzeilenbefehl kompilieren:
qbs build release

Natürlich wollen wir mit jener Funktionalität fett ins Business einsteigen und wollen es daher als Bibliothek vertreiben.
Wir teilen das Programm also in zwei Teile: Das ausführbare Modul („Main“) und die Bibliothek („HelloLib“), die wir verkaufen.
Beispiel 2: Hello, World! mit HelloLib
Erstmal das Programm:

// Projekt/Main/main.cpp
//
#include <Hello.hpp>

int main()
{
 hello();
 return 0;
}

Und die Lib:

// Projekt/Hello/Hello.hpp
#ifndef HELLO_LIB_HPP
#define HELLO_LIB_HPP

// "hello" druckt "Hello, World!" auf die Kommandozeile aus
void hello();

#endif
// Projekt/Hello/Hello.cpp
#include "Hello.hpp"

#include <iostream>
void hello()
{
   std::cout << "Hello, World!" std::endl;
}

Sobald mehrere Module im Spiel sind, ist es ratsam das Buildskript aufzuteilen statt alles in einer Datei zu behalten. Das tut der Lesbarkeit gut! 😉
Dafür benötigen wir jedoch ein weiteres Skript , welches dem Tool verrät wo weitere Skripte liegen; eine Projektdatei, wenn man so möchte.

// Projektdatei
// Projekt/build.qbs
Project{
references: [
"Hello/hello.qbs",
"Main/main.qbs"
]
}
// Buildskript für die Lib
// Projekt/Hello/hello.qbs
import qbs 1.0

StaticLibrary{
name: "HelloLib"
files: "Hello.cpp"
Depends{ name: "cpp" }

Export{
Depends{ name: "cpp" }
cpp.includePaths: "." // Gibt an, wo man nach Headern für dieses Projekt suchen sollte
}
}
// Buildskript für die EXE
// Projekt/Main/main.qbs
import qbs 1.0

Application{
name: "HelloWorld"
files: "main.cpp"

Depends{ name:"cpp" }
Depends{ name:"HelloLib" }
}

Das war jetzt ein kleiner Einblick in die „Qt Build Suite“, ich hoffe, dass dir mein (aller) erster Blogpost gefallen hat; lasst es mich in der Commentsection wissen.
Wenn du weitere Artikel zu diesem Thema lesen möchtest, dann abonniere einfach meinen Blog 🙂

Hello, World!\n

Hi,
sei willkommen auf meinem Blog.
Ich bin Julien – Abiturient, Blogger und Programmierer. Ich liebe es an verschiedenen Ideen herum zu tüfteln; sei es ein einfaches PlugIn, ein Spiel oder gar das nächste Superprogramm, das die Welt verändern wird.

Wobei… Ich glaube Letzteres hat noch etwas Zeit.

Aber ich programmiere gerne besonders vor allem in C++, C# und Python.
Und darüber wirst du auch in diesem Blog lesen können. Ich möchte dir Tools und Tricks vorstellen, die dein Leben als Programmierer bereichern und vereinfachen.

Der nächste Post kommt am 6. Semptember.
Bis dahin, bleibt cool.
Ciao!

Copyright © 2017 Julien's Blog

Theme by Anders NorenUp ↑