46 lines
1.8 KiB
Markdown
46 lines
1.8 KiB
Markdown
|
# Exercises
|
||
|
|
||
|
## Task 01
|
||
|
|
||
|
Install G++ and Clang, then compile the provided file [`hello.cpp`](task01/hello.cpp).
|
||
|
Use the following flags when compiling:
|
||
|
|
||
|
-std=c++17 -Wall -Wextra -O2
|
||
|
|
||
|
Next, set up [Boost](http://www.boost.org/) on your system and compile the provided file [`hello_boost.cpp`](task01/hello_boost.cpp).
|
||
|
Boost is quite common and provides you a set of useful C++ libraries.
|
||
|
Some of its content is even promoted into the C++ standard library.
|
||
|
|
||
|
## Task 02
|
||
|
|
||
|
Run Clang on the provided file [`vec.cpp`](task02/vec.cpp) using the following command:
|
||
|
|
||
|
clang -std=c++17 -Xclang -ast-dump -fsyntax-only -Wno-vexing-parse vec.cpp
|
||
|
|
||
|
Clang will parse the input file and display its abstract syntax tree (AST).
|
||
|
In the bottom half of the output you'll find the function declaration of `main` followed by its `CompoundStmt`.
|
||
|
Take a close look at its children and compare the resulting AST with the input code.
|
||
|
Notice any oddities — something that looks counter intuitive?
|
||
|
|
||
|
As you can see, there are multiple different ways of initialisation in C++.
|
||
|
Check out the [corresponding section at cppreference](https://en.cppreference.com/w/cpp/language/initialization).
|
||
|
|
||
|
## Task 03
|
||
|
|
||
|
The directory [`task03`](task03) hosts four subdirectories, `libFoo`, `libBar`, `libBaz`, and `app`.
|
||
|
|
||
|
Each folder prefixed with `lib` represents a library and contains a header plus a source file.
|
||
|
Furthermore, the library `libBaz.so` depends on `libBar.so`.
|
||
|
|
||
|
`app` contains a single source file providing a `main` function.
|
||
|
It depends on all three libraries.
|
||
|
|
||
|
![Dependency Graph](images/task03_dependencies.png)
|
||
|
|
||
|
- Model this project structure using [CMake](https://cmake.org/)
|
||
|
- Be sure to set the C++ standard to C++17 and enable warnings (`-Wall -Wextra`)
|
||
|
- The default build type should be *Release*
|
||
|
|
||
|
CMake itself is a build system generator.
|
||
|
You can choose from a variety of target build systems.
|