-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds initial draft for build systems (#93)
Co-authored-by: Victor Eijkhout <[email protected]> Co-authored-by: Daniel Hanson <[email protected]> Co-authored-by: Patrick Diehl <[email protected]>
- Loading branch information
Showing
1 changed file
with
115 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
## Module name: Build systems | ||
|
||
_Skeleton descriptions are typeset in italic text,_ | ||
_so please don't remove these descriptions when editing the topic._ | ||
|
||
### Overview | ||
|
||
_Provides a short natural language abstract of the module’s contents._ | ||
_Specifies the different levels of teaching._ | ||
|
||
------------------------------------------------------------------------ | ||
Level Objective | ||
----------------- ------------------------------------------------------ | ||
Foundational --- Knowledge about build systems | ||
|
||
Main --- Usage of build system to compile a executable | ||
|
||
Advanced --- Add external libraries as a dependencies | ||
|
||
------------------------------------------------------------------------ | ||
|
||
### Motivation | ||
|
||
_Why is this important?_ | ||
_Why do we want to learn/teach this topic?_ | ||
|
||
* Building complex C++ projects by hand is tricky | ||
* Build systems can help to resolve dependencies | ||
* Build systems can help do distribute C++ code and help other to compile the code | ||
* Build systems can help to find and include libraries as dependencies | ||
* Build systems faciliate project management | ||
* All major C++ projects are distributed with build systems | ||
|
||
### Topic introduction | ||
|
||
_Very brief introduction to the topic._ | ||
|
||
Build systems are used to configure, build, and install complex C++ projects. | ||
|
||
|
||
### Foundational: Knowledge about build systems | ||
|
||
#### Background/Required Knowledge | ||
|
||
A student: | ||
* Should know how to compile and link C++ programs | ||
|
||
|
||
#### Student outcomes | ||
|
||
_A list of things "a student should be able to" after the curriculum._ | ||
_The next word should be an action word and testable in an exam._ | ||
_Max 5 items._ | ||
|
||
A student should be able to: | ||
|
||
1. To explain what a build system is | ||
2. To explain that a build systems resolves dependencies | ||
3. To explain that a build system supports compilation for different operating systems and architectures | ||
|
||
#### Caveats | ||
|
||
_This section mentions subtle points to understand, like anything resulting in | ||
implementation-defined, unspecified, or undefined behavior._ | ||
|
||
None | ||
|
||
#### Points to cover | ||
|
||
_This section lists important details for each point._ | ||
|
||
* Mention that many build systems are available for C++ | ||
* Mention benefits and challenges | ||
* Build system help to only compile the C++ files with code changes and not the complete project | ||
|
||
### Main: Usage of build system to compile a executable | ||
|
||
#### Background/Required Knowledge | ||
|
||
* All of the above. | ||
|
||
#### Student outcomes | ||
|
||
A student should be able to: | ||
|
||
1. Download a C++ package and build the package | ||
2. Write a configuration file to compile a C++ executable | ||
3. Pass compiler options via the build system | ||
4. Use the build system to generate the executable | ||
5. Write a configuration file to compile a library and link the library to a C++ executable | ||
|
||
#### Caveats | ||
|
||
The instructions are restricted to the chosen build system and | ||
not easily transferable. | ||
|
||
|
||
#### Points to cover | ||
|
||
* Include paths to header files to the configuration | ||
* Adding compiler flags | ||
* How to build Release and Debug builds | ||
* Linking external libraries to the C++ project | ||
* Support compilation on different operating systems, compilers, and architectures | ||
|
||
|
||
### Advanced | ||
|
||
_These are important topics that are not expected to be covered but provide | ||
guidance where one can continue to investigate this topic in more depth._ | ||
|
||
* How to build libraries | ||
* How to have external libraries be downloaded during the build process | ||
* Mention that build systems provide support for unit testing | ||
|