修改CMakeLists.txt使CLion识别本地Qt6以运行CGAL Qt6 Demo
解决CGAL Qt6 Demo编译问题(Hyperbolic_triangulation_2)
问题背景
- 基于CLion + vcpkg开发,已通过
C:\dev\vcpkg> .\vcpkg.exe install qt5安装Qt5,可正常运行部分CGAL Demo,但依赖Qt6的Demo(如Hyperbolic_triangulation_2)无法编译 - vcpkg暂未提供Qt6包,已手动安装MSVC2019 64位版Qt6至
C:\Qt\6.7.2\msvc2019_64 - 需要配置CMake使其找到手动安装的Qt6,或修改Demo自带的CMakeLists.txt
解决方案
方法1:CLion配置CMake参数(推荐,无需修改代码)
- 打开CLion,进入项目设置:
File > Settings > Build, Execution, Deployment > CMake - 在CMake options输入框中添加Qt6路径配置:
-DCMAKE_PREFIX_PATH=C:\Qt\6.7.2\msvc2019_64 - 确认CLion使用的工具链为MSVC2019 64位(
Settings > Build, Execution, Deployment > Toolchains),与Qt6版本匹配 - 点击Apply后重新加载CMake项目,CMake即可识别到Qt6
方法2:修改Demo的CMakeLists.txt
直接在CMakeLists.txt开头添加Qt6的配置路径提示,修改后的完整代码如下:
cmake_minimum_required(VERSION 3.12...3.29) project(Hyperbolic_triangulation_2_Demo) # 指定Qt6的CMake配置文件路径,帮助CMake定位Qt6 set(Qt6_DIR "C:/Qt/6.7.2/msvc2019_64/lib/cmake/Qt6") # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6) find_package(LEDA QUIET) # 查找Qt6 Widgets组件,改为REQUIRED以便排查定位失败问题 find_package(Qt6 REQUIRED COMPONENTS Widgets) if(CGAL_Qt6_FOUND AND Qt6_FOUND AND (CGAL_Core_FOUND OR LEDA_FOUND)) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) qt_add_executable ( HDT2 HDT2.cpp HDT2.ui resources/Delaunay_triangulation_2.qrc include/internal/Qt/HyperbolicPainterOstreamCK.h include/internal/Qt/TriangulationGraphicsItemWithColorInfo.h include/internal/Qt/TriangulationMovingPoint.h include/internal/Qt/TriangulationRemoveVertex.h) target_include_directories(HDT2 PRIVATE ./ ./include) add_to_cached_list( CGAL_EXECUTABLE_TARGETS HDT2 ) target_link_libraries ( HDT2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets) if(CGAL_Core_FOUND) target_link_libraries ( HDT2 PRIVATE CGAL::CGAL_Core) else() target_link_libraries ( HDT2 PRIVATE ${LEDA_LIBRARIES}) endif() include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) cgal_add_compilation_test( HDT2 ) else() message("NOTICE: This demo requires CGAL_Core (or LEDA), and Qt6 and will not be compiled.") endif()
修改说明
- 新增
set(Qt6_DIR ...):直接指定Qt6的CMake配置文件所在路径,这是CMake定位Qt6的核心步骤 - 将
find_package(Qt6 QUIET ...)改为REQUIRED:若Qt6定位失败会直接抛出错误,便于快速排查问题,而非静默跳过
注意事项
- 确保vcpkg使用的编译器与Qt6版本一致(均为MSVC2019 64位),避免编译链接错误
- CGAL 5.6.1已支持Qt6,无需额外升级CGAL
- 无需让vcpkg识别手动安装的Qt6,直接通过CMake配置定位即可,vcpkg继续管理CGAL等其他依赖
内容的提问来源于stack exchange,提问作者Traubenzucker
相关产品推荐
相关产品推荐

