如何通过CMake添加QScintilla库?
在CMake中链接QMake编译的QScintilla
先明确:QMake编译的QScintilla完全兼容CMake,两者只是构建系统不同,生成的库文件(.so/.dll/.a等)都是标准格式,不需要重新编译。
解决方法
方法1:用PkgConfig查找(推荐,适用于系统标准路径安装的情况)
如果你的QScintilla装在系统默认路径(比如Linux的/usr/lib、Windows的Program Files),可以借助CMake的PkgConfig模块自动定位:
# 启用PkgConfig模块 find_package(PkgConfig REQUIRED) # 查找QScintilla2的配置 pkg_check_modules(QScintilla REQUIRED QScintilla2) # 把库和头文件关联到你的编辑器目标 target_link_libraries(你的编辑器目标名 PRIVATE ${QScintilla_LIBRARIES}) target_include_directories(你的编辑器目标名 PRIVATE ${QScintilla_INCLUDE_DIRS})
方法2:手动指定路径(适用于自定义路径编译安装的情况)
如果QScintilla是你自己编译后放在非标准路径(比如~/QScintilla-build),直接指定路径即可:
# 设置QScintilla的根目录,替换成你实际的路径 set(QSCINTILLA_ROOT "~/QScintilla-build") # 添加头文件路径(一般在include/QScintilla2目录下) target_include_directories(你的编辑器目标名 PRIVATE "${QSCINTILLA_ROOT}/include/QScintilla2") # 链接库文件,注意不同系统的库名差异: # Linux/macOS:libqscintilla2.so(动态库)或libqscintilla2.a(静态库) # Windows:qscintilla2.lib(Release)或qscintilla2d.lib(Debug) target_link_libraries(你的编辑器目标名 PRIVATE "${QSCINTILLA_ROOT}/lib/libqscintilla2.so")
方法3:导入QMake的.pri文件(小众但实用)
QScintilla编译后会生成QScintilla2.pri文件,CMake可以直接读取解析里面的配置:
# 替换成你实际的pri文件路径,一般在mkspecs/modules目录下 file(READ "${QSCINTILLA_ROOT}/mkspecs/modules/qt_lib_qscintilla2.pri" QSCINTILLA_PRI) # 从pri文件中提取头文件路径 string(REGEX MATCH "INCLUDEPATH\\s*=\\s*(.*)" _ ${QSCINTILLA_PRI}) set(QSCINTILLA_INCLUDE ${CMAKE_MATCH_1}) # 从pri文件中提取库路径和库名 string(REGEX MATCH "LIBS\\s*=\\s*(.*)" _ ${QSCINTILLA_PRI}) set(QSCINTILLA_LIB ${CMAKE_MATCH_1}) # 应用到你的编辑器目标 target_include_directories(你的编辑器目标名 PRIVATE ${QSCINTILLA_INCLUDE}) target_link_libraries(你的编辑器目标名 PRIVATE ${QSCINTILLA_LIB})
踩坑排查
- 路径要准确:先确认QScintilla的include、lib目录确实存在,库文件名别写错(尤其是Debug版本带
d后缀) - Qt版本要匹配:编译QScintilla用的Qt版本,必须和你CMake项目用的Qt版本一致,否则会出现链接错误
- 位数要对应:64位项目必须用64位编译的QScintilla,32位同理,混编必报错
内容的提问来源于stack exchange,提问作者PythonistaGuru
相关产品推荐
相关产品推荐

