在以下CMake代码段中,if elseif检查使我感到困惑。我的理解是BL将始终为“ Ei”,因此无需检查其他值。是否存在BL可能被其他东西覆盖的情况?我是CMake的新手,因此需要一些帮助。
movieUrl
答案 0 :(得分:2)
代码set(BL "Ei" CACHE STRING "library")
定义CMake缓存变量。但是,如果FORCE
语句中没有set
选项,则意味着如果该变量先前在高速缓存中定义,则不会被覆盖。
用户为BL
设置不同值的一种方法是在cmake
命令行上。例如:cmake ../sourcedir -DBL:STRING=AT
通过在缓存中输入变量类型为STRING
(而不是类型INTERNAL
),这也使变量可以在cmake-gui
或ccmake
中进行配置。 (此外,set_property(... STRINGS ...)
指令告诉cmake-gui
生成一个包含Ei
,AT
和Op
的下拉列表。但是,这不是不需要从命令行设置变量,这就是为什么最好使用默认大小写来表示错误的原因。)
有关更多信息,请参见CMake's documentation for set
下的“设置缓存条目”部分。