small cmake introduction

This commit is contained in:
Robert Jeutter 2022-01-11 14:58:45 +01:00
parent e289320376
commit 775598901b
4 changed files with 76 additions and 0 deletions

1
Cmake Intro/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,8 @@
# set a minimum CMake version required
cmake_minimum_required(VERSION 2.4)
# start a new CMake project
project(HelloWorld)
# create build target app
add_executable(app hello.cpp)

7
Cmake Intro/hello.cpp Normal file
View File

@ -0,0 +1,7 @@
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
return 0;
}

60
Cmake Intro/readme.md Normal file
View File

@ -0,0 +1,60 @@
# C++ with CMAKE
The most basic project is an executable built from source code files.
For simple projects, a three line `CMakeLists.txt` file is all that is required. Inside this file are all commands for CMAKE.
You can build and run our project now. First, run the cmake executable (or cmake-gui) to configure the project and then build it with your chosen build tool.
Move to the CMake source code tree and create a build directory:
```bash
mkdir build
```
Next, navigate to the build directory and run CMake to configure the project and generate a native build system:
```bash
cd build
cmake ..
```
Then call that build system to actually compile/link the project:
```bash
cmake --build .
```
## Version Numbering and Header Files
Provide the executable and project with a version number, using CMakeLists.txt provides more flexibility. This can be done by using the `VERSION` append to the project name.
```cmake
cmake_minimum_required(VERSION 3.10)
# set the project name and version
project(HelloWorld VERSION 1.0)
```
You can also configure header files to pass version numbers to the source code. Here a header file `Hello.h.in` will be read and the version numbers passed to get `Hello.h`
```bash
configure_file(Hello.h.in Hello.h)
```
As the configured file will be written into the binary tree, add that directory to the list of paths to search for include files.
```bash
target_include_directories(HelloWorld PUBLIC
"${PROJECT_BINARY_DIR}"
)
```
When CMake configures header files the values inside `@...@` will be replaced.
## Specify the C++ Standard
Sometimes you need to explicitly state in the CMake code that it should use the correct flags. The easiest way to enable support for a specific C++ standard in CMake is by using the `CMAKE_CXX_STANDARD` variable. Make sure to add the `CMAKE_CXX_STANDARD` declarations above the call to `add_executable`.
```cmake
cmake_minimum_required(VERSION 3.10)
# set the project name and version
project(HelloWorld VERSION 1.0)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
```
## Rebuild
Build our project again. As you already created the bild directory skip this step and proceed:
```bash
cd build
cmake --build .
```