Generator Expressions是CMake中用于延迟求值的语法,解决配置阶段无法确定平台/编译器信息的问题;所有条件必须用$包裹,仅支持预定义逻辑函数,不能嵌套普通变量展开。

什么是Generator Expressions,为什么不能直接用if()?
因为CMake的if()在配置阶段(configure time)就求值,而目标平台、编译器这些信息可能要到生成构建系统(generate time)才确定。比如你用cmake -G "Ninja Multi-Config"生成VS解决方案时,MSVC变量在configure阶段是OFF,但实际构建x64平台时又需要启用/EHsc。Generator Expressions就是为解决这种“延迟求值”问题设计的——它不立即计算,而是把表达式原样写进生成的构建文件(如build.ninja或.vcxproj),由构建工具在真正编译时解析。
常用跨平台编译选项的Generator Expressions写法
核心原则:所有条件判断必须包裹在$<...>中,且只接受预定义的逻辑函数(如$<...><...><...>
-
<...><...> -
-
<...> -
<...>











