为什么 CMake 选项命令应该是 ON 或 OFF?

Mik*_*ike 4 cmake

根据cmake 文档

提供一个选项供用户选择“开”或“关”

但是,我注意到该命令适用于任何其他值。

我的测试脚本:

cmake_minimum_required (VERSION 2.6)

option(MY_VAR "var description" OFF)

message("MY_VAR=${MY_VAR}")
if(MY_VAR)
    message("MY_VAR is not OFF/FALSE/0")
endif()
Run Code Online (Sandbox Code Playgroud)

结果:

>cmake ..
or
>cmake -DMY_VAR=OFF ..

output:
MY_VAR=OFF
Run Code Online (Sandbox Code Playgroud)
>cmake -DMY_VAR=ON ..
output:
MY_VAR=ON
MY_VAR is not OFF/FALSE/0
Run Code Online (Sandbox Code Playgroud)
>cmake -DMY_VAR=FALSE ..
output:
MY_VAR=FALSE
Run Code Online (Sandbox Code Playgroud)
>cmake -DMY_VAR=TRUE ..
output:
MY_VAR=TRUE
MY_VAR is not OFF/FALSE/0
Run Code Online (Sandbox Code Playgroud)
>cmake -DMY_VAR=0 ..
output:
MY_VAR=0
Run Code Online (Sandbox Code Playgroud)
>cmake -DMY_VAR=1 ..
output:
MY_VAR=1
MY_VAR is not OFF/FALSE/0
Run Code Online (Sandbox Code Playgroud)
cmake -DMY_VAR=3 ..
output:
MY_VAR=3
MY_VAR is not OFF/FALSE/0
Run Code Online (Sandbox Code Playgroud)

Tsy*_*rev 8

命令的文档option仅描述了有关可能值的约定。本身option并不检查变量的值,因此变量可以包含任何字符串

变量的实际解释取决于CMakeLists.txt脚本。

通常,选项是用if(VAR)语法检查的,因此它们根据if command的文档进行解释:

如果常量为1ONYESTRUEY或非零数,则为 True。如果常量为0OFFNOFALSENIGNORENOTFOUND、空字符串或以后缀 结尾,则为 False -NOTFOUND

正如您所看到的,该if命令允许对选项的多个值进行 True 解释,并允许对多个值进行 False 解释。(没有理由使用带-NOTFOUND后缀的值:它们只能由类似 的命令生成find_library。)