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

能否通过函数调用退出CMake作用域并终止当前文件处理?

CMake是否支持从include的函数中终止子文件处理?

答案是不支持。

CMake里的return(PARENT_SCOPE)仅能让函数本身提前结束执行,把控制权交还给调用它的代码位置,但不会终止调用者所在的子CMakeLists.txt的后续处理。而且函数运行在独立的作用域中,无法直接干预父文件的执行流程。

可行的替代方案

你可以让函数传递一个状态标记,在调用后手动判断并执行return,实现预期效果:

# 定义在被include的文件中的函数
function(my_function)
    # 向父作用域传递需要终止的标记
    set(NEED_RETURN TRUE PARENT_SCOPE)
endfunction()

# 子CMakeLists.txt中的调用逻辑
my_function()
# 判断标记,决定是否终止当前文件处理
if(NEED_RETURN)
    return()
endif()

message("don't print this") # 这段代码不会执行

另外补充:哪怕用宏(macro)代替函数,return也只是终止宏的展开,同样无法直接终止父文件的处理流程,必须由调用处主动触发return。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:48:11