Consider the following: PROJECT(Mandatory)
SET(USING_SHAPE "" CACHE STRING "[Required] Shape config: Round or Square") SET_PROPERTY(CACHE USING_SHAPE PROPERTY STRINGS Round Square) IF (NOT USING_SHAPE) MESSAGE(FATAL_ERROR "'USING_SHAPE' variable is required but was not set. Choose Round or Square") ENDIF () MESSAGE(STATUS "Shape config: ${USING_SHAPE}") ... The first time a user runs cmake here, they will receive a wall of text about compiler identification, followed by a complex error message that most developers can probably parse, but it's poorly suited for other people participating in a larger build system. etc. This leads to a common case where teams wrap their cmake invocation behind one or more script layers to hoist the setting checks out of the scripts. Consider: PROJECT(Mandatory) EXTERNAL_VALUE( # or it could be 'set' with a special case for 'FATAL_ERROR' as the default USING_SHAPE FATAL_ERROR "Shape config" STRINGS Round Square ) MESSAGE(STATUS "Shape config: ${USING_SHAPE}") The CMake GUI(s) could also pick up on these and prompt the user for them at the start of the config state. Other wordings: SET(USING_SHAPE FATAL_ERROR "Shape Config" ...) MANDATORY(USING_SHAPE "Shape Config ...) REQUIRE_SETTING REQUIRE_VARIABLE REQUIRED_VARIABLE
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake