如何指定cmake中必须设置和存在的变量

D. *_*lex 4 variables cmake defined

我需要指定一些变量并存在于环境中。如果它不存在,则需要停止构建。

例子

if ( "${VARMUSTEXIST}" STREQUAL "ON" )
   message(STATUS is ON)
elif ("${VARMUSTEXIST}" STREQUAL "OFF")
   message(STATUS is OFF)
endif()
Run Code Online (Sandbox Code Playgroud)

我不想if (defined VARMUSTEXIST)在脚本中随处放置。在 bash 中,有一个“set -u”选项。

Ant*_*nio 5

一些初步的观点:

  • if ( "${VARMUSTEXIST}" STREQUAL "ON" ) [...] elif(AGAIN LONG EXPRESSION) [...] endif()
    通常在 cmake 中很简单:
    if (VARMUSTEXIST) [...] else() [...] endif()
  • 该命令if (DEFINED VARMUSTEXIST)需要DEFINED大写。
  • 您提到了 bash 和环境变量:
    环境变量是使用读取的$ENV{VARIABLE_NAME}
  • 对于环境变量,您将执行以下操作:

    if(NOT DEFINED ENV{VARMUSTEXIST})
        message(FATAL_ERROR "You must set VARMUSTEXIST environment variable")
    endif()
    
    Run Code Online (Sandbox Code Playgroud)

你说:

我不想if (defined VARMUSTEXIST)在脚本中到处放置

我不清楚:对于每个变量,您只需要检查一次,可能在主 CMakeLists.txt 中。当然,您需要添加NOTif (NOT DEFINED VARMUSTEXIST) [stop]

如果您可以更精确地解决您的问题,我们可以设计一个宏来检查是否定义了一个或一组变量。