add_custom_rule(write_properties OUTPUT "/RULE_PROPERTY-properties.cmake" COMMAND "${CMAKE_COMMAND}" "-DOUTPUT_FILE=/RULE_PROPERTY-properties.cmake" -P "${CMAKE_CURRENT_SOURCE_DIR}/write_properties.cmake" -- "NAME=$,NAME>" "PARENT_RULE=$,PARENT_RULE>" "GLOBAL=$,GLOBAL>" "VERBATIM=$,VERBATIM>" "OUTPUT_FILE_SET=$,OUTPUT_FILE_SET>,:>" "FOO=$,FOO>" "VOID=$,VOID>") set_property(RULE write_properties PROPERTY FOO BAR) add_custom_target(write_properties ALL) target_sources(write_properties PRIVATE FILE_SET fs TYPE write_properties FILES foo.txt) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/RULE_PROPERTY-validation.cmake" [[ macro (CHECK_VALUE test_msg value expected) if (NOT "${value}" STREQUAL "${expected}") string (APPEND RunCMake_TEST_FAILED "${test_msg}: actual result:\n [${value}]\nbut expected:\n [${expected}]\n") endif() endmacro() ]]) # predefined properties set(reference "write_properties") string (APPEND GENERATE_CONTENT "check_value (\",NAME>\" \"\${NAME}\" \"${reference}\")\n") set(reference "") string (APPEND GENERATE_CONTENT "check_value (\",PARENT_RULE>\" \"\${PARENT_RULE}\" \"${reference}\")\n") set(reference "0") string (APPEND GENERATE_CONTENT "check_value (\",GLOBAL>\" \"\${GLOBAL}\" \"${reference}\")\n") set(reference "1") string (APPEND GENERATE_CONTENT "check_value (\",VERBATIM>\" \"\${VERBATIM}\" \"${reference}\")\n") set(reference "__cmake_rule_write_properties_write_properties_fs_outputs:SOURCES") string (APPEND GENERATE_CONTENT "check_value (\",OUTPUT_FILE_SET>\" \"\${OUTPUT_FILE_SET}\" \"${reference}\")\n") get_property(reference RULE write_properties PROPERTY FOO) string (APPEND GENERATE_CONTENT "check_value (\",FOO>\" \"\${FOO}\" \"${reference}\")\n") get_property(reference RULE write_properties PROPERTY VOID) string (APPEND GENERATE_CONTENT "check_value (\",VOID>\" \"\${VOID}\" \"${reference}\")\n") file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/RULE_PROPERTY-validation.cmake" "${GENERATE_CONTENT}")