如何在CMake中使用Qwt 6.3.0及编译版本正确性疑问
在CMake中正确查找Qwt 6.3.0的方法及Qt版本适配建议
先解决Qt版本冲突问题
你用Qt5的qmake编译Qwt 6.3.0,生成的库依赖Qt5,但项目使用Qt6.7.0,两者ABI不兼容,必然会导致链接或运行时错误。必须用Qt6的构建工具重新编译Qwt:
- 调用Qt6的qmake(路径通常为
/usr/lib/qt6/bin/qmake)重新构建:cd qwt-6.3.0源码目录 /usr/lib/qt6/bin/qmake make -j$(nproc) sudo make install - 重新安装后,Qwt库会适配Qt6,避免版本冲突。
CMake查找Qwt的两种正确方法
方法1:使用find_package(推荐)
Qwt 6.3.0安装完成后,会在/usr/local/qwt-6.3.0/lib/cmake/Qwt/目录下生成QwtConfig.cmake配置文件。CMake需要定位到该文件才能正常使用find_package:
# 指定Qwt的CMake配置文件路径 set(QWT_DIR "/usr/local/qwt-6.3.0/lib/cmake/Qwt") # 查找Qwt库 find_package(Qwt REQUIRED) # 将Qwt链接到你的项目目标 target_link_libraries(你的项目名称 PRIVATE Qwt::Qwt)
Qwt::Qwt是Qwt导出的CMake目标,已经包含了头文件路径和库链接信息,无需再手动添加include_directories。
方法2:手动指定路径(当find_package失效时)
如果Qwt未生成正确的CMake配置文件,可以手动指定头文件和库路径:
# 添加Qwt头文件目录 target_include_directories(你的项目名称 PRIVATE /usr/local/qwt-6.3.0/include) # 查找Qwt库文件(根据实际库名调整,比如Qt6编译的库可能是libqwt.so或libqwt6.so) find_library(QWT_LIBRARY NAMES qwt PATHS /usr/local/qwt-6.3.0/lib NO_DEFAULT_PATH) # 链接Qwt库到项目 target_link_libraries(你的项目名称 PRIVATE ${QWT_LIBRARY})
额外提示
在KDevelop中,确保项目的CMake构建环境指向Qt6:可以在项目配置中设置CMAKE_PREFIX_PATH为Qt6的安装目录(比如/usr/lib/qt6),避免CMake误选Qt5环境。
内容的提问来源于stack exchange,提问作者Loke
相关产品推荐
相关产品推荐

