能否通过函数调用退出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
相关产品推荐
相关产品推荐

