CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) PROJECT(STREQUAL NONE) SET(CMAKE_VERBOSE_MAKEFILE ON) UNSET(NONEXIST) UNSET(NONEXIST CACHE) IF(NONEXIST STREQUAL "xyz") MESSAGE("STREQUAL, NONEXIST[SCOPE]=${NONEXIST}, NONEXIST[CACHE]=$CACHE{NONEXIST}") ELSE() MESSAGE("NOT STREQUAL, NONEXIST[SCOPE]=${NONEXIST}, NONEXIST[CACHE]=$CACHE{NONEXIST}") ENDIF() SET(SCOPEONLY "xyz") UNSET(SCOPEONLY CACHE) IF(SCOPEONLY STREQUAL "xyz") MESSAGE("STREQUAL, SCOPEONLY[SCOPE]=${SCOPEONLY}, SCOPEONLY[CACHE]=$CACHE{SCOPEONLY}") ELSE() MESSAGE("NOT STREQUAL, SCOPEONLY[SCOPE]=${SCOPEONLY}, SCOPEONLY[CACHE]=$CACHE{SCOPEONLY}") ENDIF() SET(CACHEONLY "xyz" CACHE STRING "" FORCE) SET(CACHEONLY "pqr") # In order to check if UNSET(CACHEONLY) really... UNSET(CACHEONLY) # ...unsets CACHEONLY only in the current scope. IF(CACHEONLY STREQUAL "xyz") MESSAGE("STREQUAL, CACHEONLY[SCOPE]=${CACHEONLY}, CACHEONLY[CACHE]=$CACHE{CACHEONLY}") ELSE() MESSAGE("NOT STREQUAL, CACHEONLY[SCOPE]=${CACHEONLY}, CACHEONLY[CACHE]=$CACHE{CACHEONLY}") ENDIF() SET(BOTHEQUAL "xyz" CACHE STRING "" FORCE) SET(BOTHEQUAL "xyz") # Actually unnecessary. IF(BOTHEQUAL STREQUAL "xyz") MESSAGE("STREQUAL, BOTHEQUAL[SCOPE]=${BOTHEQUAL}, BOTHEQUAL[CACHE]=$CACHE{BOTHEQUAL}") ELSE() MESSAGE("NOT STREQUAL, BOTHEQUAL[SCOPE]=${BOTHEQUAL}, BOTHEQUAL[CACHE]=$CACHE{BOTHEQUAL}") ENDIF() SET(BOTHUNEQUAL "abc" CACHE STRING "" FORCE) SET(BOTHUNEQUAL "xyz") IF(BOTHUNEQUAL STREQUAL "xyz") MESSAGE("STREQUAL, BOTHUNEQUAL[SCOPE]=${BOTHUNEQUAL}, BOTHUNEQUAL[CACHE]=$CACHE{BOTHUNEQUAL}") ELSE() MESSAGE("NOT STREQUAL, BOTHUNEQUAL[SCOPE]=${BOTHUNEQUAL}, BOTHUNEQUAL[CACHE]=$CACHE{BOTHUNEQUAL}") ENDIF()