add_executable(resource-compiler compiler.cpp) function(psemek_add_resources TARGET) get_target_property(OUT_DIR ${TARGET} BINARY_DIR) get_target_property(INPUT_DIR ${TARGET} SOURCE_DIR) target_include_directories(${TARGET} PRIVATE "${OUT_DIR}/resource/include") while(ARGN) list(GET ARGN 0 FILE) list(GET ARGN 1 NAME) list(REMOVE_AT ARGN 0 1) get_filename_component(NAME_PREFIX ${NAME} DIRECTORY) file(MAKE_DIRECTORY "${OUT_DIR}/resource/include/${NAME_PREFIX}") file(MAKE_DIRECTORY "${OUT_DIR}/resource/source/${NAME_PREFIX}") set(OUT_HEADER "${OUT_DIR}/resource/include/${NAME}.hpp") set(OUT_SOURCE "${OUT_DIR}/resource/source/${NAME}.cpp") add_custom_command(OUTPUT "${OUT_HEADER}" "${OUT_SOURCE}" COMMAND resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}" DEPENDS resource-compiler "${FILE}" WORKING_DIRECTORY "${INPUT_DIR}") target_sources(${TARGET} PRIVATE "${OUT_HEADER}" "${OUT_SOURCE}") endwhile() endfunction()