CGAL新手---入门难点:CGAL_Qt5 Returns FALSE in CMake
New to CGAL---Difficulties in Getting Started: CGAL_Qt5 Returns FALSE in CMake
背景
我对 C++ 和 CMake 比较陌生,对 CGAL 尤其陌生。截至目前,我只是想熟悉 CGAL,以便我可以重新制作我最初在 MATLAB 中构建的算法,但由于它们的计算几何库不足,我正在转向 C++ 和 CGAL。
使用的系统和版本
OS 内核:Ubuntu 20.04
CGAL 5.2.1
CMake 3.16.3
问题
我目前正在尝试构建“使用 Qt5 的最小示例”,发现 here。
起初,我收到一条错误消息,说 CGAL/Qt/Basic_viewer_qt.h: No such file or directory
。这似乎是一个简单的修复,因为 /usr/include/CGAL
目录中缺少 Qt 文件夹以及其他文件夹。在这里,CGAL 安装了 apt-get
。为了解决这个问题,我只是从 CGAL 的 github 复制了完整的 include
目录。
现在,CMake 仍然存在问题,其中 CGAL_FOUND
returns FALSE
并且当我尝试构建可执行文件时,我没有得到任何结果或错误消息(即没有 main
可执行文件 cgalTest/bin
).
更多详情
项目的文件夹结构
cgalTest
-bin
-build
--<CMake stuff>
-CMakeLists.txt
-doc
-include
-lib
-spike
-src
--main.cpp
-test
CMakeLists.txt
cmake_minimum_required(VERSION 3.16.3)
project(cgalTest)
### Link with Libraries ###
# CGAL
find_package(CGAL REQUIRED COMPONENTS Qt5 Core)
if(CGAL_FOUND AND CGAL_Qt5_FOUND)
#required to use basic_viewer
add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS)
#create the executable of the application
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
#link it with the required CGAL libraries
target_link_libraries(${PROJECT_NAME} CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_Core)
else()
if(NOT CGAL_FOUND)
message("ERROR: this program requires CGAL and will not be compiled.")
endif()
if(NOT CGAL_Qt5_FOUND)
message("ERROR: this program requires CGAL_Qt5 and will not be compiled.")
endif()
endif()
main.cpp
#include <iostream>
#include <string>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/draw_surface_mesh.h>
#include <fstream>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_3 Point;
typedef CGAL::Surface_mesh<Point> Mesh;
using namespace std;
// Main Code
int main()
{
Mesh sm1;
std::ifstream in1((argc>1)?argv[1]:"data/elephant.off");
in1 >> sm1;
CGAL::draw(sm1);
return EXIT_SUCCESS;
}
我是如何构建项目的
我只是运行以下内容:
cmake --build /home/<user>/Projects/cgalTest/build
CMake 配置输出
[main] Configuring folder: cgalTest
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -H/home/<user>/Projects/cgalTest -B/home/<user>/Projects/cgalTest/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Using header-only CGAL
[cmake] -- Targetting Unix Makefiles
[cmake] -- Using /usr/bin/c++ compiler.
[cmake] -- Boost include dirs: /home/linuxbrew/.linuxbrew/include
[cmake] -- Boost libraries:
[cmake] -- Using gcc version 4 or later. Adding -frounding-math
[cmake] ERROR: this program requires CGAL_Qt5 and will not be compiled.
[cmake] CMake Warning at /home/linuxbrew/.linuxbrew/lib/cmake/CGAL/CGAL_enable_end_of_configuration_hook.cmake:99 (message):
[cmake] =======================================================================
[cmake]
[cmake] CGAL performance notice:
[cmake]
[cmake] The variable CMAKE_BUILD_TYPE is set to "Debug". For performance reasons,
[cmake] you should set CMAKE_BUILD_TYPE to "Release".
[cmake]
[cmake] Set CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE to TRUE if you want to disable
[cmake] this warning.
[cmake]
[cmake] =======================================================================
[cmake] Call Stack (most recent call first):
[cmake] CMakeLists.txt:9999 (CGAL_run_at_the_end_of_configuration)
[cmake]
[cmake]
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/<user>/Projects/cgalTest/build
最后的想法
正如我所说,我对此还是很陌生,在其中的一些过程中可能需要一些帮助。再次感谢,我们将不胜感激。
另外,不要犹豫,批评你看到的任何其他东西:文件夹结构、编码实践等
所以基本上,当我安装 qt5 时,我相信我使用了
sudo apt-get libcal-qt5-default
而不是
sudo apt-get libcal-qt5-dev
.
这当然是基于我对我在安装过程中所做的事情的记忆,但只是 运行 “dev” 的安装修复了它(即,将 CGAL_QT_FOUND
设置为 TRUE
然后让我编译)。
与此同时,在 main.cpp 中,我缺少 argc
和 argv
的参数定义。
背景
我对 C++ 和 CMake 比较陌生,对 CGAL 尤其陌生。截至目前,我只是想熟悉 CGAL,以便我可以重新制作我最初在 MATLAB 中构建的算法,但由于它们的计算几何库不足,我正在转向 C++ 和 CGAL。
使用的系统和版本
OS 内核:Ubuntu 20.04
CGAL 5.2.1
CMake 3.16.3
问题
我目前正在尝试构建“使用 Qt5 的最小示例”,发现 here。
起初,我收到一条错误消息,说 CGAL/Qt/Basic_viewer_qt.h: No such file or directory
。这似乎是一个简单的修复,因为 /usr/include/CGAL
目录中缺少 Qt 文件夹以及其他文件夹。在这里,CGAL 安装了 apt-get
。为了解决这个问题,我只是从 CGAL 的 github 复制了完整的 include
目录。
现在,CMake 仍然存在问题,其中 CGAL_FOUND
returns FALSE
并且当我尝试构建可执行文件时,我没有得到任何结果或错误消息(即没有 main
可执行文件 cgalTest/bin
).
更多详情
项目的文件夹结构
cgalTest
-bin
-build
--<CMake stuff>
-CMakeLists.txt
-doc
-include
-lib
-spike
-src
--main.cpp
-test
CMakeLists.txt
cmake_minimum_required(VERSION 3.16.3)
project(cgalTest)
### Link with Libraries ###
# CGAL
find_package(CGAL REQUIRED COMPONENTS Qt5 Core)
if(CGAL_FOUND AND CGAL_Qt5_FOUND)
#required to use basic_viewer
add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS)
#create the executable of the application
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
#link it with the required CGAL libraries
target_link_libraries(${PROJECT_NAME} CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_Core)
else()
if(NOT CGAL_FOUND)
message("ERROR: this program requires CGAL and will not be compiled.")
endif()
if(NOT CGAL_Qt5_FOUND)
message("ERROR: this program requires CGAL_Qt5 and will not be compiled.")
endif()
endif()
main.cpp
#include <iostream>
#include <string>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/draw_surface_mesh.h>
#include <fstream>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_3 Point;
typedef CGAL::Surface_mesh<Point> Mesh;
using namespace std;
// Main Code
int main()
{
Mesh sm1;
std::ifstream in1((argc>1)?argv[1]:"data/elephant.off");
in1 >> sm1;
CGAL::draw(sm1);
return EXIT_SUCCESS;
}
我是如何构建项目的
我只是运行以下内容:
cmake --build /home/<user>/Projects/cgalTest/build
CMake 配置输出
[main] Configuring folder: cgalTest
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -H/home/<user>/Projects/cgalTest -B/home/<user>/Projects/cgalTest/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Using header-only CGAL
[cmake] -- Targetting Unix Makefiles
[cmake] -- Using /usr/bin/c++ compiler.
[cmake] -- Boost include dirs: /home/linuxbrew/.linuxbrew/include
[cmake] -- Boost libraries:
[cmake] -- Using gcc version 4 or later. Adding -frounding-math
[cmake] ERROR: this program requires CGAL_Qt5 and will not be compiled.
[cmake] CMake Warning at /home/linuxbrew/.linuxbrew/lib/cmake/CGAL/CGAL_enable_end_of_configuration_hook.cmake:99 (message):
[cmake] =======================================================================
[cmake]
[cmake] CGAL performance notice:
[cmake]
[cmake] The variable CMAKE_BUILD_TYPE is set to "Debug". For performance reasons,
[cmake] you should set CMAKE_BUILD_TYPE to "Release".
[cmake]
[cmake] Set CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE to TRUE if you want to disable
[cmake] this warning.
[cmake]
[cmake] =======================================================================
[cmake] Call Stack (most recent call first):
[cmake] CMakeLists.txt:9999 (CGAL_run_at_the_end_of_configuration)
[cmake]
[cmake]
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/<user>/Projects/cgalTest/build
最后的想法
正如我所说,我对此还是很陌生,在其中的一些过程中可能需要一些帮助。再次感谢,我们将不胜感激。
另外,不要犹豫,批评你看到的任何其他东西:文件夹结构、编码实践等
所以基本上,当我安装 qt5 时,我相信我使用了
sudo apt-get libcal-qt5-default
而不是
sudo apt-get libcal-qt5-dev
.
这当然是基于我对我在安装过程中所做的事情的记忆,但只是 运行 “dev” 的安装修复了它(即,将 CGAL_QT_FOUND
设置为 TRUE
然后让我编译)。
与此同时,在 main.cpp 中,我缺少 argc
和 argv
的参数定义。