cmake_minimum_required(VERSION 2.6) project(Unset C) # Local variable set(x 42) if(NOT x EQUAL 42) message(FATAL_ERROR "x!=42") endif() if(NOT DEFINED x) message(FATAL_ERROR "x should be defined!") endif() unset(x) if(DEFINED x) message(FATAL_ERROR "x should be undefined now!") endif() # Local variable test unset via set() set(x 43) if(NOT x EQUAL 43) message(FATAL_ERROR "x!=43") endif() set(x) if(DEFINED x) message(FATAL_ERROR "x should be undefined now!") endif() # Cache variable set(BAR "test" CACHE STRING "documentation") if(NOT DEFINED BAR) message(FATAL_ERROR "BAR not defined") endif() # Test interaction of cache entries with variables. set(BAR "test-var") if(NOT "$CACHE{BAR}" STREQUAL "test") message(FATAL_ERROR "\$CACHE{BAR} changed by variable BAR") endif() if(NOT "${BAR}" STREQUAL "test-var") message(FATAL_ERROR "\${BAR} not separate from \$CACHE{BAR}") endif() unset(BAR) if(NOT "${BAR}" STREQUAL "test") message(FATAL_ERROR "\${BAR} does not fall through to \$CACHE{BAR}") endif() # Test unsetting of CACHE entry. unset(BAR CACHE) if(DEFINED BAR) message(FATAL_ERROR "BAR still defined") endif() # Test unset(... PARENT_SCOPE) function(unset_zots) if(NOT DEFINED ZOT1) message(FATAL_ERROR "ZOT1 is not defined inside function") endif() if(NOT DEFINED ZOT2) message(FATAL_ERROR "ZOT2 is not defined inside function") endif() unset(ZOT1) unset(ZOT2 PARENT_SCOPE) if(DEFINED ZOT1) message(FATAL_ERROR "ZOT1 is defined inside function after unset") endif() if(NOT DEFINED ZOT2) message(FATAL_ERROR "ZOT2 is not defined inside function after unset(... PARENT_SCOPE)") endif() endfunction() set(ZOT1 1) set(ZOT2 2) unset_zots() if(NOT DEFINED ZOT1) message(FATAL_ERROR "ZOT1 is not still defined after function") endif() if(DEFINED ZOT2) message(FATAL_ERROR "ZOT2 is still defined after function unset PARENT_SCOPE") endif() add_executable(Unset unset.c)