macro(optional_source TOGGLE)
  parse_arguments(OPTIONAL_SOURCE
    "SOURCES;HEADERS;UI;INCLUDE_DIRECTORIES"
    ""
    ${ARGN}
  )

  if(${TOGGLE})
    list(APPEND SOURCES ${OPTIONAL_SOURCE_SOURCES})
    list(APPEND HEADERS ${OPTIONAL_SOURCE_HEADERS})
    list(APPEND UI ${OPTIONAL_SOURCE_UI})
    include_directories(${OPTIONAL_SOURCE_INCLUDE_DIRECTORIES})
  else(${TOGGLE})
    list(APPEND OTHER_SOURCES ${OPTIONAL_SOURCE_SOURCES})
    list(APPEND OTHER_SOURCES ${OPTIONAL_SOURCE_HEADERS})

    set(_uic_sources)
    qt5_wrap_ui(_uic_sources ${OPTIONAL_SOURCE_UI})
    list(APPEND OTHER_SOURCES ${_uic_sources})
    list(APPEND OTHER_UIC_SOURCES ${_uic_sources})
  endif(${TOGGLE})
endmacro(optional_source)