我是 CentOS 6 服务器的用户,管理员很好心地安装了 在上面。首先,我将在本地机器上描述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 ../
阶段,我收到如下消息:
CMake 警告 (dev) at utils/CMakeLists.txt:31 (add_executable):
未设置策略CMP0028:目标名称中的双冒号表示别名或 导入的目标。 为策略运行"cmake --help-policy CMP0028" 详。 使用 cmake_policy 命令设置策略并禁止 此警告。目标"emst"链接到目标"CGAL::CGAL",但目标不是 发现。 也许导入的 find_package() 调用丢失 目标,还是缺少别名目标?此警告适用于项目 开发 人员。 使用 -Wno-dev 来抑制它。
我尝试find_package(CGAL REQUIRED)
以便它抛出错误(如果未找到)。似乎找到了包。 这里可能出现什么问题?
根据我对 CGAL 的经验,您需要包含 use 文件: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...
)