Я изучаю экосистему stm32 параллельно с написанием сценариев cmake.Я для этого написал smt32 toolchain.Когда я строил простой код, компилятор возвращал мне следующую проблему:
arm-none-eabi-g++: fatal error: /usr/lib/gcc/arm-none-eabi/7.1.0/../../../../arm-none-eabi/lib/nano.specs: attempt to rename spec 'link' to already defined spec 'nano_link'
Я искал много сайтов, но не нашел решений.Вот мой файл набора инструментов.
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-none-eabi-gcc CACHE STRING "CMAKE_C_COMPILER")
set(CMAKE_CXX_COMPILER arm-none-eabi-g++ CACHE STRING "CMAKE_CXX_COMPILER")
set(CMAKE_LINKER arm-none-eabi-ld CACHE STRING "CMAKE_LINKER")
set(CMAKE_SIZE arm-none-eabi-size CACHE STRING "CMAKE_SIZE")
set(CMAKE_OBJCOPY arm-none-eabi-objcopy CACHE STRING "CMAKE_OBJCOPY")
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(COMMON_FLAGS "-mcpu=cortex-m3")
set(COMMON_FLAGS "${COMMON_FLAGS} -c")
set(COMMON_FLAGS "${COMMON_FLAGS} -mfloat-abi=soft")
set(COMMON_FLAGS "${COMMON_FLAGS} -mthumb")
set(COMMON_FLAGS "${COMMON_FLAGS} -fdata-sections")
set(COMMON_FLAGS "${COMMON_FLAGS} -ffunction-sections")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "CFLAGS")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "CXXFLAGS")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${COMMON_FLAGS}")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS}" CACHE STRING "")
set(LINKER_FLAGS "-mcpu=cortex-m3")
set(LINKER_FLAGS "${LINKER_FLAGS} -mthumb")
set(LINKER_FLAGS "${LINKER_FLAGS} -lc")
set(LINKER_FLAGS "${LINKER_FLAGS} -lm")
set(LINKER_FLAGS "${LINKER_FLAGS} -lnosys")
set(LINKER_FLAGS "${LINKER_FLAGS} -specs=nano.specs")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
Что я не так делаю?CMake дублирует флаги компоновщика для каждого компилятора (g ++, gcc, as)?
Спасибо за каждую помощь.