【问题标题】:Checking for CMake Variables检查 CMake 变量
【发布时间】:2015-08-04 11:54:01
【问题描述】:

我的 CMakeLists.txt 中有以下 CMake 代码 sn-p:

cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)

message(STATUS "Before setting - ${MY_VARIABLE}")

# first check
if(NOT DEFINED ${MY_VARIABLE})
  set(MY_VARIABLE true)
endif(NOT DEFINED ${MY_VARIABLE})

message(STATUS "After setting - ${MY_VARIABLE}")

# second check
if(NOT DEFINED ${MY_VARIABLE})
  message(STATUS "What - ${MY_VARIABLE}")
endif(NOT DEFINED ${MY_VARIABLE})

CMake 配置的输出是:

-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/local/bin/cc
-- Check for working C compiler: /usr/local/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/local/bin/c++
-- Check for working CXX compiler: /usr/local/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Before setting - 
-- After setting - true
-- What - true
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/build

问题: 为什么第二次检查变量定义报告变量未定义,即使它已定义?令人惊讶的是,变量的值也打印正确!

【问题讨论】:

  • 如果未定义变量,我认为if (NOT <var>) 不正确。我在第一次签入上面的代码sn-p之前添加了它,它并没有进入真正的块。 CMake 文档说:如果常量为 1、ON、YES、TRUE、Y 或非零数字,则为 True。如果常量为 0、OFF、NO、FALSE、N、IGNORE、NOTFOUND、空字符串或以后缀 -NOTFOUND 结尾,则为 False。它没有谈论未定义的变量。

标签: cmake


【解决方案1】:

有区别:if(NOT DEFINED VAR_NAME)if(NOT DEFINED ${VAR_NAME})

第一个引用变量,另一个引用它的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2014-09-16
    • 2020-06-08
    • 2021-01-13
    相关资源
    最近更新 更多