include(RunCMake) # CMP0156 control how libraries are specified for the link step # a sensible configuration is how circular dependency is handled macro(run_cmake_and_build test) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) set(RunCMake_TEST_OUTPUT_MERGE TRUE) run_cmake(${test}) set(RunCMake_TEST_NO_CLEAN TRUE) run_cmake_command(${test}-build ${CMAKE_COMMAND} --build . --config Release) unset(RunCMake_TEST_NO_CLEAN) unset(RunCMake_TEST_BINARY_DIR) unset(RunCMake_TEST_OUTPUT_MERGE) endmacro() run_cmake(CMP0156-WARN) run_cmake_and_build(CMP0156-OLD) run_cmake_and_build(CMP0156-NEW) if (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_C_COMPILER_VERSION GREATER_EQUAL "15.0") # special case for Apple: with CMP0156=OLD, linker will warning on duplicate libraries run_cmake_and_build(CMP0156-OLD-AppleClang) run_cmake_and_build(CMP0156-NEW-AppleClang) endif()