在项目中仅使用CGAL 4.12标头

时间:2018-05-19 16:54:55

标签: c++ clion cgal header-only

我正在使用CLION在C ++中开发一个类项目,它需要CGAL库,而我在使用该库来处理我的项目时遇到了麻烦。

为了简单起见,我们试图让库工作在它的头文件配置中,但是当谈到这种做法时,CGAL的文档有点细节。在this part of the installation documentation中,我们被告知要在某处提取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 :(得分:0)

我的猜测是你完全不知道

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

之后你应该检查CMAKE变量CGAL_DIR是否指向你提取的CGAL目录,你应该没问题。

答案 1 :(得分:0)

您需要:

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 package manager,因此很快就会有所不同。