include_guard(GLOBAL) function(myx_target_setup NAME) set(options) set(oneValueArgs PCH) set(multiValueArgs COMPILE_DEFINITIONS FIND_PACKAGES LINK_LIBRARIES SOURCES) cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) foreach(iter ${arg_FIND_PACKAGES}) find_package(${iter} CONFIG REQUIRED) target_include_directories(${NAME} PRIVATE ${${iter}_INCLUDE_DIRS}) target_compile_definitions(${NAME} PRIVATE ${${iter}_COMPILE_DEFINITIONS}) endforeach() target_compile_definitions(${NAME} PRIVATE ${arg_COMPILE_DEFINITIONS}) if(arg_PCH) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.16) target_precompile_headers(${NAME} PRIVATE ${PROJECT_SOURCE_DIR}/${arg_PCH}) else() target_compile_options(${NAME} PRIVATE -include ${PROJECT_SOURCE_DIR}/${arg_PCH}) endif() target_sources(${NAME} PRIVATE ${PROJECT_SOURCE_DIR}/${arg_PCH}) endif() target_sources(${NAME} PRIVATE ${arg_SOURCES}) target_link_libraries(${NAME} PRIVATE ${arg_LINK_LIBRARIES}) target_compile_definitions(${NAME} PRIVATE ${arg_COMPILE_DEFINITIONS}) endfunction()