C语言

Qt Quick Ultralite中断处理示例

cmake_minimum_required (VERSION 3.21.1)

project(interrupt_handler VERSION 0.0.1 LANGUAGES C CXX ASM)
if (NOT TARGET Qul::Core)
    find_package(Qul)
endif()

# Figure out correct board and os directory names
string(REGEX MATCHALL "([^\-]+|[^\-]+$)" PLATFORM_COMPONENTS ${QUL_PLATFORM})
list(LENGTH PLATFORM_COMPONENTS PLATFORM_COMPONENT_COUNT)
if(${PLATFORM_COMPONENT_COUNT} EQUAL 3)
    list(GET PLATFORM_COMPONENTS 0 PLATFORM_FAMILY)
    list(GET PLATFORM_COMPONENTS 1 PLATFORM_BOARD)
    string(JOIN "-" PLATFORM_BOARD_NAME ${PLATFORM_FAMILY} ${PLATFORM_BOARD})
    string(TOLOWER ${PLATFORM_BOARD_NAME} PLATFORM_BOARD_NAME_LOWER)

    if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${PLATFORM_BOARD_NAME_LOWER}")
        set(PLATFORM_DIR ${PLATFORM_BOARD_NAME_LOWER})
    else()
        set(PLATFORM_DIR "example")
    endif()
else()
    set(PLATFORM_DIR "example")
endif()

qul_add_target(interrupt_handler
    interrupt_queue.cpp
    os/${QUL_OS_LOWERCASE}/main.cpp
    QML_PROJECT
    mcu_interrupt_handler.qmlproject
)
target_link_libraries(interrupt_handler PRIVATE Qul::PlatformBSPConfig) # This is needed because there are SDK files involved.
target_include_directories(interrupt_handler PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

app_target_setup_os(interrupt_handler)

add_subdirectory(${PLATFORM_DIR})