为什么 if(DEFINED <variable>) 在 cmake 中不起作用?

4 cmake

根据有关if关键字的CMake 文档:

if(DEFINED <variable>)

如果给定的变量已定义,则为真。只要变量已经被设置,它是真还是假并不重要。(注意宏参数不是变量。)

我有这个小的 CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)
project(abc)
message("CMAKE_CXX_FLAGS_DEBUG 1: ${CMAKE_CXX_FLAGS_DEBUG}")
if(DEFINED ${CMAKE_CXX_FLAGS_DEBUG})
message("CMAKE_CXX_FLAGS_DEBUG 2: ${CMAKE_CXX_FLAGS_DEBUG}")
endif(DEFINED ${CMAKE_CXX_FLAGS_DEBUG})
message("CMAKE_CXX_FLAGS_DEBUG 3: ${CMAKE_CXX_FLAGS_DEBUG}")
Run Code Online (Sandbox Code Playgroud)

这给出了cmake path/to/CMakeLists.txt调用的下一个输出:

CMAKE_CXX_FLAGS_DEBUG 1: -g
CMAKE_CXX_FLAGS_DEBUG 3: -g
-- Configuring done
-- Generating done
-- Build files have been written to: current/dir
Run Code Online (Sandbox Code Playgroud)

第二行在哪里?

CMAKE_CXX_FLAGS_DEBUG 2: -g
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 10

使用if(DEFINED <variable>)if(DEFINED ${<variable>})。换句话说,直接使用变量名,不要在if( 除非它包含另一个你真正想要测试的变量的名称) 中扩展它。