You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake库依赖Git子模块Freetype,跨项目引用时缺失依赖报错

解决CMake中find_package(dearimgui)因缺失Freetype导入目标失败的问题

问题根源

你把dearimgui安装后,它的CMake配置文件会依赖Freetype的导入目标,但其他项目执行find_package(dearimgui)时,CMake找不到Freetype的目标——因为你的Freetype是作为子模块编译的,默认不会生成并安装自身的CMake配置文件,dearimgui的配置文件也没处理Freetype的依赖查找逻辑。

具体修复步骤

1. 让Freetype子模块生成并安装CMake配置文件

打开Freetype子模块的CMakeLists.txt,在文件末尾添加以下代码:

# 导出Freetype目标,生成配置文件
install(EXPORT FreetypeTargets
  FILE FreetypeTargets.cmake
  NAMESPACE Freetype::
  DESTINATION lib/cmake/Freetype
)

# 生成版本配置文件
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
  "FreetypeConfigVersion.cmake"
  VERSION ${FREETYPE_VERSION}
  COMPATIBILITY SameMajorVersion
)

# 生成主配置文件(需要先写一个FreetypeConfig.cmake.in模板)
configure_package_config_file(
  "${CMAKE_CURRENT_SOURCE_DIR}/FreetypeConfig.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/FreetypeConfig.cmake"
  INSTALL_DESTINATION lib/cmake/Freetype
)

# 安装所有配置文件
install(FILES
  "${CMAKE_CURRENT_BINARY_DIR}/FreetypeConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/FreetypeConfigVersion.cmake"
  DESTINATION lib/cmake/Freetype
)

如果Freetype子模块目录下没有FreetypeConfig.cmake.in文件,自己新建一个,内容如下:

@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/FreetypeTargets.cmake")
check_required_components(Freetype)

2. 修改dearimgui顶层CMakeLists.txt,传递Freetype依赖

  • 首先,确保dearimgui链接Freetype时使用PUBLIC,让依赖能传递给下游项目:
# 替换你原来的target_link_libraries语句
target_link_libraries(dearimgui PUBLIC Freetype::Freetype)
  • 然后,修改dearimgui的CMake配置文件模板(比如dearimguiConfig.cmake.in),添加Freetype的依赖查找:
@PACKAGE_INIT@

# 先查找Freetype依赖
find_dependency(Freetype REQUIRED)

# 导入dearimgui目标
include("${CMAKE_CURRENT_LIST_DIR}/dearimguiTargets.cmake")
check_required_components(dearimgui)

3. 确保安装时包含Freetype

如果Freetype子模块自己的CMakeLists没有安装逻辑,在顶层CMakeLists.txt中添加:

# 假设你的Freetype子模块路径是thirdparty/freetype
add_subdirectory(thirdparty/freetype)
# 安装Freetype库文件
install(TARGETS freetype EXPORT FreetypeTargets DESTINATION lib)

4. 重新编译安装

执行以下命令重新编译并安装整个项目:

mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/你想要的安装路径
make install

这样,其他项目再执行find_package(dearimgui)时,CMake会自动先找到Freetype的配置文件,导入对应的目标,就能正常使用dearimgui了。

内容的提问来源于stack exchange,提问作者Suxin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:15:55