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

如何阻止CMake构建外部依赖中子目录dir1的目标?

不修改第三方CMake配置停止构建指定子目录的解决方案

方法1:拦截add_subdirectory调用(推荐)

在主项目的CMakeLists.txt中,于调用add_subdirectory(extern)之前,定义自定义的add_subdirectory函数,拦截对dir1的添加操作,其余子目录正常执行原始逻辑:

# 保存CMake原生的add_subdirectory函数
function(add_subdirectory_orig)
    _add_subdirectory(${ARGV})
endfunction()

# 自定义add_subdirectory,跳过dir1的构建
function(add_subdirectory)
    if("${ARGV0}" STREQUAL "dir1")
        message(STATUS "Skipping build of dir1 as requested")
        return()
    endif()
    add_subdirectory_orig(${ARGV})
endfunction()

# 引入第三方extern目录
add_subdirectory(extern)

该方案完全无需修改第三方文件,所有逻辑封装在主项目配置中,团队成员和客户无需额外操作即可正常构建。

方法2:标记dir1目标为EXCLUDE_FROM_ALL

若明确知道dir1生成的所有目标名称(如库、可执行文件),可在主项目中将这些目标设置为EXCLUDE_FROM_ALL,默认构建时会跳过它们:

add_subdirectory(extern)

# 假设dir1生成的目标是dir1_lib和dir1_executable
set_target_properties(dir1_lib dir1_executable PROPERTIES EXCLUDE_FROM_ALL TRUE)

注意:此方法需精准覆盖dir1的所有目标,若dir1内部嵌套较多子目标,容易遗漏,可靠性不如方法1。

方法3:临时隐藏dir1目录(不推荐)

通过构建脚本临时重命名dir1目录,待CMake完成extern配置后恢复:

mv extern/dir1 extern/dir1.temp
cmake ..
mv extern/dir1.temp extern/dir1

该方案依赖特定脚本,跨平台兼容性差,且若CMake配置过程需读取dir1内文件会触发错误,仅作为极端场景下的备选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:37:20