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