From b7875f3b88fc31a96ad0c817d0eb9b3c922c9050 Mon Sep 17 00:00:00 2001 From: Tarik Moussa Date: Sat, 14 Feb 2026 22:23:21 +0200 Subject: [PATCH] add CMake dependency handling for portability --- .gitignore | 34 ------------------- code/.gitignore | 64 ++++++++++++++++++++++++++++++++++++ code/CMakeList.txt | 80 --------------------------------------------- code/CMakeLists.txt | 49 +++++++++++++++++++++++++++ code/src/main.cpp | 40 +++++++++++++++++++++++ 5 files changed, 153 insertions(+), 114 deletions(-) delete mode 100644 .gitignore create mode 100644 code/.gitignore delete mode 100644 code/CMakeList.txt create mode 100644 code/CMakeLists.txt create mode 100644 code/src/main.cpp diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e257658..0000000 --- a/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# ---> C++ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - diff --git a/code/.gitignore b/code/.gitignore new file mode 100644 index 0000000..59ae13f --- /dev/null +++ b/code/.gitignore @@ -0,0 +1,64 @@ +# Build artifacts +build/ +*.o +*.so +*.dylib +*.dll + +# Dependencies: Tarballs immer committen, entpackte ignorieren + +deps +!deps/single_includes/ +!deps/tarballs/*.tar.* + +deps/eigen/ +deps/boost/ +deps/cgal/ +!deps/cgal/include/ # Falls einzelne Includes brauchst +!deps/eigen/Eigen/ +!deps/boost/boost/ + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# ---> C++ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + diff --git a/code/CMakeList.txt b/code/CMakeList.txt deleted file mode 100644 index a08bece..0000000 --- a/code/CMakeList.txt +++ /dev/null @@ -1,80 +0,0 @@ -cmake_minimum_required(VERSION 3.15) - -# Projektname aus Ordner ableiten -get_filename_component(PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE) -get_filename_component(PROJECT_NAME "${PARENT_DIR}" NAME) -project(${PROJECT_NAME} LANGUAGES CXX) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -# Build-Typ -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) -endif() -message(STATUS "CMake build type: ${CMAKE_BUILD_TYPE}") - -# Compiler-Flags (inkl. M1-Optimierung) -if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - message(STATUS "Using Clang/GCC warning flags") - add_compile_options(-Wall -Wextra -Wpedantic) - - # AddressSanitizer im Debug - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -fsanitize=address -fno-omit-frame-pointer") - - # Release-Optimierung (inkl. optional M1) - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") - - if(APPLE) - execute_process(COMMAND uname -m - OUTPUT_VARIABLE ARCH - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(ARCH STREQUAL "arm64") - # Wenn du lieber generisch bleiben willst: -march=native statt -mcpu=apple-m1 - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mcpu=apple-m1") - endif() - endif() -endif() - -# --------- Abhängigkeiten --------- -include(FetchContent) - -FetchContent_Declare( - Eigen - GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git - GIT_TAG 3.3 - GIT_SHALLOW TRUE - GIT_PROGRESS TRUE -) -set(EIGEN_BUILD_DOC OFF CACHE BOOL "" FORCE) -set(BUILD_TESTING OFF CACHE BOOL "" FORCE) -set(EIGEN_BUILD_PKGCONFIG OFF CACHE BOOL "" FORCE) -FetchContent_MakeAvailable(Eigen) - -find_package(Boost REQUIRED) -find_package(CGAL REQUIRED) - -add_subdirectory(deps/cgal) - - -# --------- Quellen & Executable --------- -set(SRCFILES - ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp -) - - -add_executable(${PROJECT_NAME} ${SRCFILES}) - -target_include_directories(${PROJECT_NAME} PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/deps/single_includes -) - -target_link_libraries(${PROJECT_NAME} PRIVATE - CGAL::CGAL - Eigen3::Eigen - ${Boost_LIBRARIES} -) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt new file mode 100644 index 0000000..e56b3e0 --- /dev/null +++ b/code/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 3.20) +# Automatisch Projektname aus Parent-Ordner + +set(PROJECT_NAME "ConformalLabpp") + +project(${PROJECT_NAME} LANGUAGES CXX) + +message(STATUS "Configuring ${PROJECT_NAME}...") + +# Build-Setup +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) +endif() + +# Compiler-Warnings & Optimierungen +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + add_compile_options(-Wall -Wextra -Wpedantic) + + # AddressSanitizer nur im Debug + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_link_options(-fsanitize=address) + endif() +endif() + + +add_subdirectory(deps) + +# --------- Executable --------- +add_executable(${PROJECT_NAME} src/main.cpp) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/deps/single_includes + ${CMAKE_CURRENT_SOURCE_DIR}/deps/eigen-3.4.0/ + ${CMAKE_CURRENT_SOURCE_DIR}/deps/CGAL-6.1.1/include + ${CMAKE_CURRENT_SOURCE_DIR}/deps/boost_1_90_0/ +) + +# Output-Ordner +set_target_properties(${PROJECT_NAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) diff --git a/code/src/main.cpp b/code/src/main.cpp new file mode 100644 index 0000000..5c14b7a --- /dev/null +++ b/code/src/main.cpp @@ -0,0 +1,40 @@ +#include +#include + +typedef CGAL::Simple_cartesian Kernel; +typedef Kernel::Point_2 Point_2; +typedef Kernel::Segment_2 Segment_2; + +int main() +{ + Point_2 p(1,1), q(10,10); + + std::cout << "p = " << p << std::endl; + std::cout << "q = " << q.x() << " " << q.y() << std::endl; + + std::cout << "sqdist(p,q) = " + << CGAL::squared_distance(p,q) << std::endl; + + Segment_2 s(p,q); + Point_2 m(5, 9); + + std::cout << "m = " << m << std::endl; + std::cout << "sqdist(Segment_2(p,q), m) = " + << CGAL::squared_distance(s,m) << std::endl; + + std::cout << "p, q, and m "; + switch (CGAL::orientation(p,q,m)){ + case CGAL::COLLINEAR: + std::cout << "are collinear\n"; + break; + case CGAL::LEFT_TURN: + std::cout << "make a left turn\n"; + break; + case CGAL::RIGHT_TURN: + std::cout << "make a right turn\n"; + break; + } + + std::cout << " midpoint(p,q) = " << CGAL::midpoint(p,q) << std::endl; + return 0; +} \ No newline at end of file