【问题标题】:CGAL::CGAL on CMakiLists.txtCMakiLists.txt 上的 CGAL::CGAL
【发布时间】:2023-03-10 18:54:01
【问题描述】:

我是 CentOS 6 服务器的用户,管理员很友好地安装了 CGAL 就可以了。首先,我将描述本地机器上的 CMakeLists.txt, 一切正常,然后我的问题是为什么在服务器上同样不起作用。 在我的笔记本电脑上,我有一个使用 EMST 示例 https://doc.cgal.org/latest/BGL/BGL_triangulation_2_2emst_8cpp-example.html 的项目。 “最外层”的 CMakeLists.txt 有 find_package(CGAL) 而具体的 CMakeLists.txt 有这个:

add_executable(emst emst.cpp)
target_compile_options(emst BEFORE PUBLIC -mcmodel=large PRIVATE -pg -g -O2)
target_link_libraries(emst CGAL::CGAL)

整个事情“在我的机器上工作”(c)。通常,在项目的构建目录中,我会发出cmake ../,然后在特定于emst 的子目录make emst 中发出(当然,这一切都是通过在CLion 中适当单击来完成的)。 现在,这个设置在服务器上不起作用。 我收到如下错误:

/emst.cpp:99:44: error: no matching function for call to ‘source(edge_descriptor&, Triangulation&)’
         vertex_descriptor svd = source(ed,t);
                                            ^
In file included from /usr/include/CGAL/boost/graph/graph_traits_Delaunay_triangulation_2.h:25:0,

管理员告诉我:

库可以在 /usr/lib64 中找到,头文件在 /usr/include/CGAL.

在服务器上的cmake ../-阶段的某个时刻,我收到如下消息:

utils/CMakeLists.txt:31 (add_executable) 处的 CMake 警告 (dev):
未设置策略 CMP0028:目标名称中的双冒号表示 ALIAS 或 导入的目标。为策略运行“cmake --help-policy CMP0028” 细节。使用 cmake_policy 命令设置策略并抑制 这个警告。

目标“emst”链接到目标“CGAL::CGAL”,但目标不是 成立。 IMPORTED 可能缺少 find_package() 调用 目标,还是缺少 ALIAS 目标?此警告适用于项目 开发商。使用 -Wno-dev 来抑制它。

我尝试了find_package(CGAL REQUIRED),以便它在未找到时抛出错误。似乎找到了包。 这里可能出了什么问题?

【问题讨论】:

  • 服务器上的CGAL版本是多少?在 4.12 之前,您需要使用开发人员 Paul 描述的 use_file。

标签: c++ cmake cgal


【解决方案1】:

根据我使用 CGAL 的经验,您需要包含使用文件:include(${CGAL_USE_FILE}),然后您可以根据需要使用目标。根据输出消息,似乎没有找到 CGAL,因为目标 CGAL::CGAL 不存在。

所以基本上你需要:


find_package(CGAL)

# .. other code

include(${CGAL_USE_FILE})

add_executable(myexe ...)

target_link_libraries(myexe 
    PUBLIC
        CGAL::CGAL
        CGAL::CGAL_Core # and so on...
)

【讨论】:

  • 如果包含使用文件,则需要使用XXX_LIBS变量。目标 CGAL::CGAL 是 USE_FILE 的替代品。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多