Update README instructions
+ Fix incorrect library name for `algorithms/trees/BST` example + Update root CMakeLists.txt for major directories to set binary path + Add instructions to install CMake LTS with pip
This commit is contained in:
parent
9243ded17b
commit
2845b020ae
|
@ -17,6 +17,8 @@ project(
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(algorithms)
|
add_subdirectory(algorithms)
|
||||||
add_subdirectory(cmake)
|
add_subdirectory(cmake)
|
||||||
add_subdirectory(cryptography)
|
add_subdirectory(cryptography)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# Cpp
|
# Cpp
|
||||||
|
|
||||||
```
|
```bash
|
||||||
shaunrd0/klips/cpp/
|
shaunrd0/klips/cpp/
|
||||||
├── algorithms # Examples of various algorithms written in C++
|
├── algorithms # Examples of various algorithms written in C++
|
||||||
├── cmake # Example of using cmake to build and organize larger projects
|
├── cmake # Example of using cmake to build and organize larger projects
|
||||||
├── cryptography# Examples of encrypting / decrypting using ciphers in C++
|
├── cryptography # Examples of encrypting / decrypting using ciphers in C++
|
||||||
├── datastructs # Collection of useful datastructures written in C++
|
├── datastructs # Collection of useful datastructures written in C++
|
||||||
├── graphics # Examples of graphics projects written in C++
|
├── graphics # Examples of graphics projects written in C++
|
||||||
├── patterns # Examples of various design patterns written in C++
|
├── patterns # Examples of various design patterns written in C++
|
||||||
|
@ -15,15 +15,68 @@ This directory contains a `CMakeLists.txt`, which can be selected to open as a
|
||||||
project within your preferred IDE. From there, all nested examples can be built,
|
project within your preferred IDE. From there, all nested examples can be built,
|
||||||
debugged, and ran.
|
debugged, and ran.
|
||||||
|
|
||||||
In general, if a `CMakeLists.txt` is included in the project's root directory,
|
Some of the more recent projects in this repository requires the latest CMake LTS.
|
||||||
we can build the example with the following commands
|
To install `cmake` LTS with `apt` we can follow [official instructions from kitware](https://apt.kitware.com/)
|
||||||
|
Alternatively, we can install the LTS with python's `pip`.
|
||||||
|
```bash
|
||||||
|
sudo apt install python3.9 python3-pip
|
||||||
|
sudo apt purge cmake
|
||||||
|
python3.9 -m pip install -U pip
|
||||||
|
python3.9 -m pip install --upgrade cmake
|
||||||
|
# The command below is optional if you have added the python binary path to your PATH environment variable
|
||||||
|
sudo ln -s /usr/local/lib/python3.9/dist-packages/cmake/data/bin/cmake /usr/bin/
|
||||||
|
cmake --version
|
||||||
|
|
||||||
|
cmake version 3.22.1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Once cmake is installed, dependencies for all examples can be installed with the command below.
|
||||||
|
```bash
|
||||||
|
sudo apt install libsdl2-dev freeglut3-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
If we build from this directory, we build all C++ projects and examples
|
||||||
|
```bash
|
||||||
|
cd /path/to/klips/cpp/
|
||||||
mkdir build && cd build
|
mkdir build && cd build
|
||||||
cmake .. && cmake --build .
|
cmake .. && cmake --build .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
We can see the binaries output in the `build/bin/` folder
|
||||||
|
```bash
|
||||||
|
~/Code/klips/cpp/build$ ls bin/
|
||||||
|
abstract-factory-test graph-test-templated SingleListDriver
|
||||||
|
adapter-test graph-test-weighted singleton-test
|
||||||
|
bridge-test HeapDriver StackDriver
|
||||||
|
bubble-sort heap-sort state-test
|
||||||
|
bucket-sort insertion-sort TemplatedDoubleListDriver
|
||||||
|
CircleDoubleDriver merge-sort TemplatedQueueDriver
|
||||||
|
CircleSingleDriver observer-test TemplatedStackDriver
|
||||||
|
columnar-transposition-test opengl-test TemplatedVectorDriver
|
||||||
|
counting-sort prototype-test test-bst
|
||||||
|
DoubleListDriver QueueDriver test-bst-algo
|
||||||
|
execute-hello quick-sort test-redblack
|
||||||
|
factory-test radix-sort VectorDriver
|
||||||
|
graph-test-object sdl-test visitor-test
|
||||||
|
graph-test-simple select-sort
|
||||||
|
```
|
||||||
|
|
||||||
|
We can also build from subdirectories.
|
||||||
|
To only build projects related to design patterns we build from the `patterns/` subdirectory, for example
|
||||||
|
```bash
|
||||||
|
cd /path/to/klips/cpp/patterns
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. && cmake --build .
|
||||||
|
```
|
||||||
|
|
||||||
|
And we can again see the binaries output in the `build/bin/` folder
|
||||||
|
```bash
|
||||||
|
~/Code/klips/cpp/patterns/build$ ls bin/
|
||||||
|
abstract-factory-test bridge-test observer-test singleton-test visitor-test
|
||||||
|
adapter-test factory-test prototype-test state-test
|
||||||
|
```
|
||||||
|
|
||||||
If cmake is not being used in a project, it can be built with `g++` manually using
|
If cmake is not being used in a project, it can be built with `g++` manually using
|
||||||
the commands outlined in `*/.vscode/tasks.json`, or by using VSCode to open the example
|
the commands outlined in `*/.vscode/tasks.json`, or by using VSCode to open the example
|
||||||
and running the build task.
|
and running the build task.
|
||||||
|
Check the header comments in the main source file for the example for instructions.
|
||||||
|
|
|
@ -15,6 +15,8 @@ project (
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(graphs)
|
add_subdirectory(graphs)
|
||||||
add_subdirectory(sorting)
|
add_subdirectory(sorting)
|
||||||
add_subdirectory(trees)
|
add_subdirectory(trees)
|
||||||
|
|
|
@ -15,6 +15,8 @@ project (
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(object)
|
add_subdirectory(object)
|
||||||
add_subdirectory(simple)
|
add_subdirectory(simple)
|
||||||
add_subdirectory(templated)
|
add_subdirectory(templated)
|
||||||
|
|
|
@ -15,6 +15,8 @@ project (
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(bubble)
|
add_subdirectory(bubble)
|
||||||
add_subdirectory(bucket)
|
add_subdirectory(bucket)
|
||||||
add_subdirectory(count)
|
add_subdirectory(count)
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(BubbleSort LANGUAGES CXX)
|
project(BubbleSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(bubble-sort "bubble-sort.cpp")
|
add_executable(bubble-sort "bubble-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-bubble "lib-bubble.cpp")
|
add_library(lib-bubble "lib-bubble.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(BucketSort LANGUAGES CXX)
|
project(BucketSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(bucket-sort "bucket-sort.cpp")
|
add_executable(bucket-sort "bucket-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-bucket "lib-bucket.cpp")
|
add_library(lib-bucket "lib-bucket.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(CountingSort LANGUAGES CXX)
|
project(CountingSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(counting-sort "counting-sort.cpp")
|
add_executable(counting-sort "counting-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-counting "lib-counting.cpp")
|
add_library(lib-counting "lib-counting.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(HeapSort LANGUAGES CXX)
|
project(HeapSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(heap-sort "heap-sort.cpp")
|
add_executable(heap-sort "heap-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-heap "lib-heap.cpp")
|
add_library(lib-heap "lib-heap.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(InsertionSort LANGUAGES CXX)
|
project(InsertionSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(insertion-sort "insertion-sort.cpp")
|
add_executable(insertion-sort "insertion-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-insertion "lib-insertion.cpp")
|
add_library(lib-insertion "lib-insertion.cpp")
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.17)
|
cmake_minimum_required(VERSION 3.17)
|
||||||
project(MergeSort LANGUAGES CXX)
|
project(MergeSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
add_executable(merge-sort "merge-sort.cpp")
|
add_executable(merge-sort "merge-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-merge "lib-merge.cpp")
|
add_library(lib-merge "lib-merge.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(QuickSort LANGUAGES CXX)
|
project(QuickSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(quick-sort "quick-sort.cpp")
|
add_executable(quick-sort "quick-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-quick "lib-quick.cpp")
|
add_library(lib-quick "lib-quick.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(RadixSort LANGUAGES CXX)
|
project(RadixSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(radix-sort "radix-sort.cpp")
|
add_executable(radix-sort "radix-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-radix-counting "lib-counting.cpp")
|
add_library(lib-radix-counting "lib-counting.cpp")
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(SelectionSort LANGUAGES CXX)
|
project(SelectionSort LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
|
|
||||||
add_executable(select-sort "select-sort.cpp")
|
add_executable(select-sort "select-sort.cpp")
|
||||||
|
|
||||||
add_library(lib-select "lib-select.cpp")
|
add_library(lib-select "lib-select.cpp")
|
||||||
|
|
|
@ -15,5 +15,7 @@ project (
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(binary)
|
add_subdirectory(binary)
|
||||||
add_subdirectory(redblack)
|
add_subdirectory(redblack)
|
||||||
|
|
|
@ -18,4 +18,4 @@ project (
|
||||||
add_library(lib-bst-algo "bst.cpp")
|
add_library(lib-bst-algo "bst.cpp")
|
||||||
|
|
||||||
add_executable(test-bst-algo "driver.cpp")
|
add_executable(test-bst-algo "driver.cpp")
|
||||||
target_link_libraries(test-bst-algo lib-bst)
|
target_link_libraries(test-bst-algo lib-bst-algo)
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
# Define the version of CMake
|
# Define the version of CMake
|
||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
# Define the your project name
|
# Define the your project name
|
||||||
project(cmake-template)
|
project(cmake-template)
|
||||||
|
|
||||||
|
|
|
@ -15,4 +15,6 @@ project (
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(columnar-transposition)
|
add_subdirectory(columnar-transposition)
|
||||||
|
|
|
@ -15,6 +15,8 @@ project (
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(binarysearchtree)
|
add_subdirectory(binarysearchtree)
|
||||||
add_subdirectory(circledoublelist)
|
add_subdirectory(circledoublelist)
|
||||||
add_subdirectory(circlesinglelist)
|
add_subdirectory(circlesinglelist)
|
||||||
|
|
|
@ -17,5 +17,7 @@ project(
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(opengl-cmake)
|
add_subdirectory(opengl-cmake)
|
||||||
add_subdirectory(sdl-cmake)
|
add_subdirectory(sdl-cmake)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# Graphics
|
# Graphics
|
||||||
|
|
||||||
Example graphics programming projects written in C++
|
Example graphics programming projects written in C++.
|
||||||
|
For a more complete example of a graphics application, see [shaunrd0/qtk](https://gitlab.com/shaunrd0/qtk)
|
||||||
|
|
||||||
```
|
```
|
||||||
klips/cpp/graphics
|
klips/cpp/graphics
|
||||||
|
@ -10,3 +11,21 @@ klips/cpp/graphics
|
||||||
├── sdl-cmake # Barebones sdl application written in C++ built with cmake
|
├── sdl-cmake # Barebones sdl application written in C++ built with cmake
|
||||||
└── sdl # Barebones sdl application written in C++ built with gcc
|
└── sdl # Barebones sdl application written in C++ built with gcc
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Install dependencies for these examples with the following command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install libsdl2-dev freeglut3-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Then we can build the examples that have `CMakeLists.txt` configured.
|
||||||
|
If the example does not use CMake, the commands to build and run are found within the header comments of the main source file.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /path/to/klips/cpp/graphics/
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. && cmake --build .
|
||||||
|
ls bin/
|
||||||
|
|
||||||
|
opengl-test sdl-test
|
||||||
|
```
|
||||||
|
|
|
@ -24,7 +24,6 @@ if (OPENGL_FOUND)
|
||||||
# Link opengl-test executable to OpenGL
|
# Link opengl-test executable to OpenGL
|
||||||
target_include_directories(lib-opengl-test PUBLIC ${OPENGL_INCLUDE_DIR})
|
target_include_directories(lib-opengl-test PUBLIC ${OPENGL_INCLUDE_DIR})
|
||||||
target_link_libraries(lib-opengl-test PUBLIC ${OPENGL_LIBRARIES})
|
target_link_libraries(lib-opengl-test PUBLIC ${OPENGL_LIBRARIES})
|
||||||
|
|
||||||
else()
|
else()
|
||||||
message(
|
message(
|
||||||
"Error: CMake was unable to find the OpenGL package\n"
|
"Error: CMake was unable to find the OpenGL package\n"
|
||||||
|
@ -38,7 +37,6 @@ if (GLUT_FOUND)
|
||||||
# Link lib-opengl-test executable to GLUT
|
# Link lib-opengl-test executable to GLUT
|
||||||
target_include_directories(lib-opengl-test PUBLIC ${GLUT_INCLUDE_DIR})
|
target_include_directories(lib-opengl-test PUBLIC ${GLUT_INCLUDE_DIR})
|
||||||
target_link_libraries(lib-opengl-test PUBLIC ${GLUT_LIBRARIES})
|
target_link_libraries(lib-opengl-test PUBLIC ${GLUT_LIBRARIES})
|
||||||
|
|
||||||
else()
|
else()
|
||||||
message(
|
message(
|
||||||
"Error: CMake was unable to find the GLUT package\n"
|
"Error: CMake was unable to find the GLUT package\n"
|
||||||
|
|
|
@ -15,6 +15,8 @@ project(
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
add_subdirectory(singleton)
|
add_subdirectory(singleton)
|
||||||
add_subdirectory(adapter)
|
add_subdirectory(adapter)
|
||||||
add_subdirectory(bridge)
|
add_subdirectory(bridge)
|
||||||
|
|
Loading…
Reference in New Issue