检查CMake变量

53

我在CMakeLists.txt中有以下CMake代码片段:

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
问题: 为什么第二个变量定义检查会报告变量未定义,即使它已被定义?令人惊讶的是,该变量的值也被正确打印!
为什么第二个变量定义检查会报告变量未定义,即使它已被定义?令人惊讶的是,该变量的值也被正确打印!

1
我认为如果变量未定义,则if (NOT <var>)是不成立的。我在上面的代码片段中添加了它,在第一个检查之前,并且它不会进入真块。CMake文档表示: 如果常量为1、ON、YES、TRUE、Y或非零数字则为真。如果常量为0、OFF、NO、FALSE、N、IGNORE、NOTFOUND、空字符串或以NOTFOUND结尾,则为假。它不涉及未定义的变量。 - asumang
1个回答

112

这两者有所不同:if(NOT DEFINED VAR_NAME)是指变量本身,而if(NOT DEFINED ${VAR_NAME})则是指其内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接