add CMake dependency handling for portability
This commit is contained in:
34
.gitignore
vendored
34
.gitignore
vendored
@@ -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
|
|
||||||
|
|
||||||
64
code/.gitignore
vendored
Normal file
64
code/.gitignore
vendored
Normal file
@@ -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
|
||||||
|
|
||||||
@@ -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}
|
|
||||||
)
|
|
||||||
49
code/CMakeLists.txt
Normal file
49
code/CMakeLists.txt
Normal file
@@ -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
|
||||||
|
)
|
||||||
40
code/src/main.cpp
Normal file
40
code/src/main.cpp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <CGAL/Simple_cartesian.h>
|
||||||
|
|
||||||
|
typedef CGAL::Simple_cartesian<double> 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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user