function (add_lesson target) cmake_parse_arguments(PARSE_ARGV 1 arg "" "" "SOURCES;SHADERS;DATA") add_executable(${target} MACOSX_BUNDLE WIN32 application.c application.h nehe.c nehe.h matrix.c matrix.h) set_property(TARGET ${target} PROPERTY C_STANDARD 99) target_compile_options(${target} PRIVATE $<$:-Weverything -Wno-declaration-after-statement -Wno-padded -Wno-switch-enum -Wno-cast-qual> $<$:-Wall -Wextra -pedantic> $<$:/W4>) target_compile_definitions(${target} PRIVATE $<$:_CRT_SECURE_NO_WARNINGS>) target_link_libraries(${target} SDL3::SDL3) target_sources(${target} PRIVATE ${arg_SOURCES}) foreach (shader IN LISTS arg_SHADERS) if (shader MATCHES "\\.metal$") set(path "${CMAKE_SOURCE_DIR}/src/shaders/${shader}") else() set(path "${CMAKE_SOURCE_DIR}/data/shaders/${shader}") endif() set_source_files_properties(${path} PROPERTIES HEADER_FILE_ONLY ON MACOSX_PACKAGE_LOCATION "Resources/Shaders") target_sources(${target} PRIVATE "${path}") endforeach() foreach (resource IN LISTS arg_DATA) set(path "${CMAKE_SOURCE_DIR}/data/${resource}") set_source_files_properties(${path} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/Data") target_sources(${target} PRIVATE "${path}") endforeach() unset(path) endfunction()