diff --git a/CMakeLists.txt b/CMakeLists.txt index a6a7599..f664142 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,11 +88,25 @@ target_link_options(${PROJECT_NAME} PRIVATE # 容量宏(代码中如需按容量分支使用 GD32_FLASH_SIZE_KB) target_compile_definitions(${PROJECT_NAME} PRIVATE GD32_FLASH_SIZE_KB=${GD32_FLASH_SIZE_KB}) -# 生成 map 文件等 +# 生成 map 文件等。`--no-warn-rwx-segments` 仅用于抑制新版本 +# binutils 的 RWX 段警告,旧版(例如 xPack GCC 11.3 搭配 binutils 2.38) +# 不认识该选项,因此先探测链接器能力,避免因工具链版本差异导致链接失败。 target_link_options(${PROJECT_NAME} PRIVATE -Wl,-Map=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Application.map - -Wl,--no-warn-rwx-segments ) +execute_process( + COMMAND "${CMAKE_LINKER}" --help + OUTPUT_VARIABLE FILMFORGE_LINKER_HELP + ERROR_VARIABLE FILMFORGE_LINKER_HELP_ERROR + RESULT_VARIABLE FILMFORGE_LINKER_HELP_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(FILMFORGE_LINKER_HELP_RESULT EQUAL 0 AND + FILMFORGE_LINKER_HELP MATCHES "no-warn-rwx-segments") + target_link_options(${PROJECT_NAME} PRIVATE -Wl,--no-warn-rwx-segments) +else() + message(STATUS "Linker does not support --no-warn-rwx-segments; skipping it") +endif() # 链接SDK库 target_link_libraries(${PROJECT_NAME} PRIVATE CMSIS)