Difference between target_link_libraries and adding headers via target_sources

Hi all

Is target link libraries needed when wanted to add the .c files in a library, and then do target_sources file sets to specify which header files to use from that(or what the file needs)? Also, if I strictly just wnat to add a header file(an interface library), do I do target link libraries INTERFACE said target and then in the target-sources add it in in the files section?

Something like so

cmake_path(GET CMAKE_CURRENT_SOURCE_DIR PARENT_PATH PARENT_DIR)

add_executable(app_main main.c)

target_sources(app_main
PUBLIC
FILE_SET HEADERS
BASE_DIRS
${PARENT_DIR}/tusb_src
${PARENT_DIR}/file_processing
${CMAKE_CURRENT_SOURCE_DIR}
FILES
${PARENT_DIR}/file_processing/file_processing.h
${PARENT_DIR}/hardware_processing/common_header.h)

target_include_directories(${EXECUTABLE_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

##target_compile_definitions(app_main PUBLIC CFG_TUH_ENABLED=1)

target_link_libraries(app_main PRIVATE file_processing host_storage pico_multicore hardware_clocks file_processing common_header)

with common header being defined as

set(common_processing_Headers ${CMAKE_CURRENT_SOURCE_DIR}/common_header.h)

add_library(common_headers INTERFACE ${common_processing_HEADERS})

target_link_libraries(hardware_processing
PRIVATE hardware_spi hardware_sync
PUBLIC hardware_pio hardware_irq hardware_gpio hardware_dma fatfs_lib
PUBLIC hardware_uart
INTERFACE common_headers)

Is this a correct way to do this? I’m just very unsure about this

Kind regards