如何在Qt Creator CMake QML项目中正确添加OpenXLSX库?
在Qt Creator CMake项目中正确集成第三方库(以OpenXLSX为例)
一、正确集成带CMake配置的第三方库(如OpenXLSX)
你的第二次尝试是符合现代CMake最佳实践的正确方式,官方文档提到的“将OpenXLSX文件夹作为子目录添加到项目源码树”,本质就是使用add_subdirectory指令实现。
具体步骤:
- 将OpenXLSX完整源码文件夹放到你的项目根目录(与项目主CMakeLists.txt同级)
- 在项目主CMakeLists.txt中,确保在
add_executable之后、链接指令之前添加:add_subdirectory(OpenXLSX) - 在
target_link_libraries中链接库目标:target_link_libraries(appTest PRIVATE Qt6::Quick OpenXLSX::OpenXLSX )
这种方式无需修改库的源码,CMake会自动处理头文件路径、编译规则,是最推荐的做法。你第一次直接拷贝源文件并修改#include路径的方法,不仅维护成本高(库更新后需重复修改),还破坏了库本身的CMake配置,完全不建议使用。
二、解决编译警告问题
你遇到的-Wsign conversion等警告,是因为OpenXLSX的代码未适配你的编译器默认警告等级,可通过两种方式解决:
- 针对库单独调整警告等级:在
add_subdirectory前临时降低警告等级,避免影响自身项目代码:# 保存当前警告设置 set(OLD_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # 关闭特定警告 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-conversion -Wno-shorten-64-to-32 -Wno-defaulted-function-deleted") add_subdirectory(OpenXLSX) # 恢复原有警告设置 set(CMAKE_CXX_FLAGS ${OLD_CXX_FLAGS}) - 修改OpenXLSX的CMakeLists.txt:若你是本地维护或fork了该库,可在它的CMakeLists中添加关闭警告的指令:
target_compile_options(OpenXLSX PRIVATE -Wno-sign-conversion -Wno-shorten-64-to-32)
这种方式更干净,不会影响自身项目的警告规则。
三、关于Qt Creator的“添加库”选项
Qt Creator的“添加库”功能确实存在,但仅对.qmake(.pro文件)项目默认显示,CMake项目需手动触发:
- 在项目面板右键点击CMake项目根节点
- 选择添加... -> 库...
- 按照向导选择“外部库”或“内部库”,CMake项目下该功能会自动生成
find_package或add_subdirectory相关代码(若库支持)
不过对于自带CMakeLists.txt的库(如OpenXLSX),手动编写add_subdirectory反而更直接可控。
四、通用第三方库集成流程(CMake项目)
根据库的类型,对应不同的最佳实践:
- 带CMakeLists.txt的源码库:直接用
add_subdirectory链接库目标,简单可靠。 - 预编译库(.a/.so/.lib/.dll):优先使用
find_package(若库提供Config.cmake),或手动用add_library导入后设置头文件路径与链接路径。 - 仅头文件的库:通过
target_include_directories将库的头文件目录添加到项目目标即可。
内容的提问来源于stack exchange,提问作者Moreno
相关产品推荐
相关产品推荐

