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

为何CMake会将第三方库头文件与我的可执行文件一同安装?

解决CMake FetchContent安装时第三方依赖被一并安装的问题

针对你遇到的问题,以下是几种适配CMake 3.30.5版本的有效解决方式:

方法一:在FetchContent声明时排除第三方项目的默认构建目标

修改你的PDFHummus.cmake文件,在FetchContent_Declare中添加EXCLUDE_FROM_ALL ON参数,切断第三方项目install目标与主项目install流程的关联:

if(NOT PDFHummus_POPULATED)
  Include(FetchContent)
  FetchContent_Declare(
      PDFHummus
      GIT_REPOSITORY ${REPO}
      GIT_TAG v4.6.8
      DOWNLOAD_EXTRACT_TIMESTAMP FALSE
      FIND_PACKAGE_ARGS
      EXCLUDE_FROM_ALL ON  # 新增该行
  )
  FetchContent_MakeAvailable(PDFHummus)
endif()

该参数会将第三方项目的所有目标标记为EXCLUDE_FROM_ALL,仅当显式引用时才会构建,其install规则不会被主项目的install目标触发。

方法二:显式指定仅安装自身项目目标

无需修改FetchContent声明,直接构建项目专属的安装子目标即可。CMake会为每个自定义目标生成<TARGET_NAME>-install格式的安装子目标,执行以下命令:

cmake --build --preset Debug-Windows --target=${PROJECT_NAME}-install

此命令仅执行你自己项目中install(TARGETS ${PROJECT_NAME} ...)定义的安装规则,完全跳过第三方依赖的安装流程。

方法三:手动禁用第三方项目的install规则

若前两种方法不适用,可在引入第三方项目后,单独禁用其install目标。在FetchContent_MakeAvailable后添加以下代码:

FetchContent_MakeAvailable(PDFHummus)
# 禁用PDFHummus的install目标
get_target_property(_pdfhummus_install_target PDFHummus::PDFWriter INSTALL_REMOVE)
if(NOT _pdfhummus_install_target)
  set_target_properties(PDFHummus::PDFWriter PROPERTIES INSTALL_REMOVE ON)
endif()

这种方法需要针对每个第三方依赖单独处理,适合需要精细控制的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:54:56