Использование CGAL 4.12 только для заголовка в проекте - PullRequest
0 голосов
/ 19 мая 2018

Я работаю над проектом класса в C ++ с использованием CLION, для которого требуется библиотека CGAL, и у меня возникают проблемы с получением библиотеки для работы с моим проектом.

Мы пытаемся заставить библиотеку работать в конфигурации только для заголовка для простоты, однако документация для CGAL немного тонка в деталях, когда речь заходит о таком способе работы.В этой части документации по установке нам сказано извлекать куда-нибудь данные библиотеки CGAL и ссылаться на них в переменной в нашем файле cmake.Однако мы не можем ссылаться ни на какие заголовки CGAL в нашем проекте - ни один из каталогов или файлов не может быть найден вообще.

Мы пытались исправить это самостоятельно некоторое время, но на самом деле мы не знаем, где искать или в чем проблема, и документация для CGAL не очень помогает.Ниже я прикрепил содержимое нашего файла CMakeLists, сделали ли мы что-то действительно неправильно или это так и должно быть?

cmake_minimum_required(VERSION 3.9)
project(remeshing_project)
set(CMAKE_CXX_STANDARD 17)

if(MINGW OR CYGWIN)
    add_definitions(-O3)
endif()

set(ENV{CGAL_DIR} S:/dev/cgal)

add_definitions(-DCGAL_DIR=$(CGAL_DIR))
#add_definitions(-DCGAL_LINKED_WITH_TBB)
#add_definitions(-DCGAL_USE_GMP)
#add_definitions(-DCGAL_USE_MPFR)
#add_definitions(-DCGAL_USE_ZLIB)

link_libraries(../external/glew_2_1_0/lib/Release/Win32/glew32s)
link_libraries(../external/glfw/lib-vc2015/glfw3)
link_libraries(../external/openGL/OPENGL32)
link_libraries(../external/openGL/glut32)
link_libraries(../external/openGL/glu32)


#Header Locations
set(HEADER_DIRS external/tinyply
        external/libigl/include/
        external/glfw/include/
        external/eigen-git-mirror/
        external/glew_2_1_0/include/
        external/nanoflann/
        external/spectra/
        external/halfedge/
        external/
        $(CGAL_DIR)/)

add_executable(Remesher src/main.cpp external/halfedge/trimesh.cpp src/meshMetrics.cpp src/meshMetrics.h src/remeshingTools.cpp src/remeshingTools.h src/dataStructures.h)
target_include_directories(Remesher PRIVATE ${HEADER_DIRS})

Любая помощь будет чрезвычайно признательна, мы бились по этому поводунекоторое время и в недоумении.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вам нужно:

find_package(CGAL QUIET COMPONENTS Core )    
if(CGAL_FOUND)
  #Don't let CGAL override flags
  set(CGAL_DONT_OVERRIDE_CMAKE_FLAGS TRUE CACHE BOOL "Force CGAL to maintain CMAKE flags")
  include(${CGAL_USE_FILE})
  include(CGAL_CreateSingleSourceCGALProgram)
endif()

И:

add_executable(Remesher src/main.cpp external/halfedge/trimesh.cpp src/meshMetrics.cpp src/meshMetrics.h src/remeshingTools.cpp src/remeshingTools.h src/dataStructures.h)
target_link_libraries(Remesher PRIVATE ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}

CGAL также обычно требует таких вещей, как Eigen и MPFR.Полный рабочий пример приведен здесь:

https://github.com/acgetchell/CDT-plusplus/releases/tag/0.1.8

Я не связывался напрямую с моим CMakeLists.txt, потому что я нахожусь в процессе перехода на использование пакета Conanменеджер , так что скоро все будет совсем по-другому.

0 голосов
/ 22 мая 2018

Я предполагаю, что вы просто пропускаете

find_package( CGAL)
if ( CGAL_FOUND )
  include( ${CGAL_USE_FILE} )

После этого вы должны проверить, что переменная CMAKE CGAL_DIR указывает на ваш извлеченный каталог CGAL, и с вами все будет в порядке.

...