# Helper function for coupling add_feature_info(), option(), and add_definitions() function(optional_compile_definitions _name) set(options FEATURE) set(oneValueArgs DESCRIPTION DEFAULT) set(multiValueArgs ENABLED DISABLED) cmake_parse_arguments(OCD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) option(${_name} "${OCD_DESCRIPTION}" ${OCD_DEFAULT}) if (${${_name}}) set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${OCD_ENABLED}) else() set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${OCD_DISABLED}) endif() if(${OCD_FEATURE}) add_feature_info(${_name} ${_name} "${OCD_DESCRIPTION}") endif() endfunction() macro(feature_option _name _description _default) option(${_name} "${_description}" ${_default}) add_feature_info(${_name} ${_name} "${_description}") endmacro()