macro(print_versions name)
  foreach(v "" _MAJOR _MINOR _PATCH _TWEAK)
    message(STATUS "PROJECT_VERSION${v}='${PROJECT_VERSION${v}}'")
    message(STATUS "${name}_VERSION${v}='${${name}_VERSION${v}}'")
  endforeach()
endmacro()

cmake_policy(SET CMP0048 NEW)

project(ProjectA VERSION 1.2.3.4 LANGUAGES NONE)
print_versions(ProjectA)

project(ProjectB VERSION 0.1.2 LANGUAGES NONE)
print_versions(ProjectB)

set(PROJECT_VERSION 1)
set(ProjectC_VERSION 1)
project(ProjectC NONE)
print_versions(ProjectC)