【问题标题】:CMakeLists - Make linker do not find filesCMakeLists - 使链接器找不到文件
【发布时间】:2020-05-17 07:50:42
【问题描述】:

我正在尝试使用 CMake 和实际的 GNU 工具链版本 9_2019_q4_majorSTM32Cube_FW_F4_V1.24.0 运行 GPIO_EXTI 示例Windows 通过 Cygwin 终端。 该项目应在 STM32F4-DISCOVERY 板上运行。

我有一个基于Cmake File 的 CMakeLists.txt 文件。

cmake_minimum_required (VERSION 3.5)

project(F4cmake)

enable_language(C ASM)

SET(TARGET F4cmake)

SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_SYSTEM_PROCESSOR arm)
# SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})


add_definitions(-DSTM32F407xx)
add_definitions(-DUSE_STM32F4_DISCO)
add_definitions(-DUSE_HAL_DRIVER)
add_definitions(-D__MICROLIB)
add_definitions(-D_RTE_)


SET (STARTUP D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S)
message (STATUS "[DBG]: ${STARTUP}")

SET(SYSTEM D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/system_stm32f4xx.c)

SET(HAL_PATH D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver)

SET (CMSIS_SRCS  
  # ${CMAKE_CURRENT_SOURCE_DIR}/../../../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f407xx.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_gcc.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_armcc.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_compiler.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_version.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/core_cm4.h
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/mpu_armv7.h
  ${HAL_PATH}/Src/stm32f4xx_hal_pwr.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_pwr.h
  ${HAL_PATH}/Src/stm32f4xx_hal_cortex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_cortex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_gpio.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_gpio.h
  ${HAL_PATH}/Src/stm32f4xx_hal_flash.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_flash.h
  ${HAL_PATH}/Src/stm32f4xx_hal_spi.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_spi.h
  ${HAL_PATH}/Src/stm32f4xx_hal_rcc.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_rcc.h
  ${HAL_PATH}/Src/stm32f4xx_hal_flash_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_flash_ex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_rcc_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_rcc_ex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_i2c.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_i2c.h
  ${HAL_PATH}/Src/stm32f4xx_hal.c
  ${HAL_PATH}/Inc/stm32f4xx_hal.h
  ${HAL_PATH}/Src/stm32f4xx_hal_pwr_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_pwr_ex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_dma.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_dma.h
  ${HAL_PATH}/Src/stm32f4xx_hal_i2c_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_i2c_ex.h
)

SET (BSP_SRCS
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.h
)
message (STATUS "[DBG]: ${BSP_SRCS}")

SET (APP_SRCS
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/main.c
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/stm32f4xx_it.c
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/main.h
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/stm32f4xx_hal_conf.h
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/stm32f4xx_it.h
)
message (STATUS "[DBG]: ${APP_SRCS}")

include_directories (
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src
  D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include
  D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include
)


set_source_files_properties(D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp")
set_property(SOURCE D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S PROPERTY LANGUAGE C)

SET (LINKER_SCRIPT D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/SW4STM32/STM32F4-Discovery/STM32F407VGTx_FLASH.ld)
message (STATUS "[DBG]: ${LINKER_SCRIPT}")

SET(USER_SOURCES ${STARTUP} ${SYSTEM} ${CMSIS_SRCS} ${BSP_SRCS} ${APP_SRCS} ${LINKER_SCRIPT})
message(STATUS "[DBG]: ${USER_SOURCES}")

SET(COMPILER_PATH C:/GnuToolChain/9_2019_q4_major/bin)
SET(CMAKE_ASM_COMPILER "${COMPILER_PATH}/arm-none-eabi-as")
SET(CMAKE_C_COMPILER "${COMPILER_PATH}/arm-none-eabi-gcc")
SET(CMAKE_CXX_COMPILER "${COMPILER_PATH}/arm-none-eabi-g++")
SET(CMAKE_C_LINK_EXECUTABLE "${COMPILER_PATH}/arm-none-eabi-ld")
SET(CMAKE_OBJCOPY "${COMPILER_PATH}/arm-none-eabi-objcopy")
SET(CMAKE_OBJDUMP "${COMPILER_PATH}/arm-none-eabi-objdump")
SET(CMAKE_SIZE "${COMPILER_PATH}/arm-none-eabi-size")


SET(CMAKE_ASM_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")
SET(CMAKE_C_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fno-common -fsigned-char -fmessage-length=0 -Wall -Wextra -Wshadow -Os -ffunction-sections -fdata-sections -g -std=c11")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl, --specs=nosys.specs --specs=nano.specs -Wl,--gc-sections  -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs -Wl,-T ${LINKER_SCRIPT}")#-Wl,-map=${TARGET}.map,--cref #-u _printf_float -u _scanf_float 


add_executable(${TARGET}.elf ${USER_SOURCES})
set_target_properties(${TARGET}.elf PROPERTIES LINKER_LANGUAGE C)

add_custom_target (${TARGET}.bin
  DEPENDS ${TARGET}.elf
  COMMAND ${CMAKE_OBJCOPY} -O binary ${TARGET}.elf ${TARGET}.bin
)

add_custom_target (${TARGET}.lst
  DEPENDS ${TARGET}.elf
  COMMAND ${CMAKE_OBJDUMP} -Sdh ${TARGET}.elf > ${TARGET}.lst
)

CMakeLists.txt 文件的输出是:

> $ cmake.exe -G"Unix Makefiles" ..
> 
> -- The C compiler identification is unknown
> -- The CXX compiler identification is GNU 7.4.0
> -- Check for working C compiler: C:/cygwin/bin/cc
> -- Check for working C compiler: C:/cygwin/bin/cc -- works
> -- Detecting C compiler ABI info
> -- Detecting C compiler ABI info - done
> -- Check for working CXX compiler: C:/cygwin/bin/c++.exe
> -- Check for working CXX compiler: C:/cygwin/bin/c++.exe -- works
> -- Detecting CXX compiler ABI info
> -- Detecting CXX compiler ABI info - done
> -- Detecting CXX compile features
> -- Detecting CXX compile features - done
> -- The ASM compiler identification is unknown
> -- Found assembler: C:/cygwin/bin/cc
> -- Warning: Did not find file Compiler/-ASM
> -- [DBG]:
> 
> D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S
> -- [DBG]: D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.h
> -- [DBG]: D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/main.c;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Sr
> c/stm32f4xx_it.c;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/main.h;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_
> EXTI/Inc/stm32f4xx_hal_conf.h;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/stm32f4xx_it.h
> -- [DBG]: D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/SW4STM32/STM32F4-Discovery/STM32F407VGTx_FLASH.ld
> -- [DBG]: D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GP
> IO/GPIO_EXTI/Src/system_stm32f4xx.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/I
> nclude/stm32f407xx.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_gcc.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_armcc.h;D:/STM32Cube_FW_F4_V1.24 .0/Drivers/CMSIS/Core/Include/cmsis_compiler.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/cmsis_version.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/core_cm4
> .h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Core/Include/mpu_armv7.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;D:/STM32Cube_FW_F4_V1.24.0/Dri
> vers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_H
> AL_Driver/Inc/stm32f4xx_hal_cortex.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/s
> tm32f4xx_hal_gpio.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_fla
> sh.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;D:/STM32Cube_F
> W_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;D:/STM32Cube_FW_F4_V1.24.0/Driver
> s/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4
> xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver
> /Src/stm32f4xx_hal_i2c.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.
> c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;D:/STM32Cube_FW_F4
> _V1.24.0/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers /STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_D
> river/Inc/stm32f4xx_hal_i2c_ex.h;D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c;D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_disc
> overy.h;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/main.c;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/ stm32f4xx_it.c;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/main.h;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EX
> TI/Inc/stm32f4xx_hal_conf.h;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Inc/stm32f4xx_it.h;D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/
> Examples/GPIO/GPIO_EXTI/SW4STM32/STM32F4-Discovery/STM32F407VGTx_FLASH.ld
> -- Configuring done
> -- Generating done
> -- Build files have been written to: D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/build

在此之后,我在 Cygwin 终端“make”中输入,我得到以下结果:

$ make
Scanning dependencies of target F4cmake.elf
[  5%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.S.obj
[ 10%] Building C object CMakeFiles/F4cmake.elf.dir/Src/system_stm32f4xx.c.obj
[ 15%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c.obj
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c: In function 'HAL_PWR_EnterSLEEPMode':
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:365:38: warning: unused parameter 'Regulator' [-Wunused-parameter]
  365 | void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry)
      |                             ~~~~~~~~~^~~~~~~~~
[ 21%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c.obj
[ 26%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c.obj
[ 31%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c.obj
[ 36%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj
[ 42%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj
[ 47%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c.obj
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c: In function 'FLASH_MassErase':
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:953:60: warning: unused parameter 'Banks' [-Wunused-parameter]
  953 | static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks)
      |                                                   ~~~~~~~~~^~~~~
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c: In function 'FLASH_OB_EnableWRP':
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1032:74: warning: unused parameter 'Banks' [-Wunused-parameter]
 1032 | static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks)
      |                                                                 ~~~~~~~~~^~~~~
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c: In function 'FLASH_OB_DisableWRP':
D:/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1068:75: warning: unused parameter 'Banks' [-Wunused-parameter]
 1068 | static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks)
      |                                                                  ~~~~~~~~~^~~~~
[ 52%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c.obj
[ 57%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c.obj
[ 63%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj
[ 68%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c.obj
[ 73%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c.obj
[ 78%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c.obj
[ 84%] Building C object CMakeFiles/F4cmake.elf.dir/D_/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c.obj
D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c: In function 'I2Cx_Error':
D:/STM32Cube_FW_F4_V1.24.0/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c:454:32: warning: unused parameter 'Addr' [-Wunused-parameter]
  454 | static void I2Cx_Error(uint8_t Addr)
      |                        ~~~~~~~~^~~~
[ 89%] Building C object CMakeFiles/F4cmake.elf.dir/Src/main.c.obj
[ 94%] Building C object CMakeFiles/F4cmake.elf.dir/Src/stm32f4xx_it.c.obj
[100%] Linking C executable F4cmake.elf.exe
C:\GnuToolChain\9_2019_q4_major\bin\arm-none-eabi-ld.exe: no input files
make[2]: *** [CMakeFiles/F4cmake.elf.dir/build.make:338: F4cmake.elf.exe] Error 1
make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/F4cmake.elf.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
*** [Makefile:84: all] Error 2

我不明白,为什么链接器说他没有输入文件。

在 CMakeLists.txt 中,我明确添加了链接器 (arm-none-eabi-ld.exe),因为如果我不添加链接器,我会遇到其他故障,并且 MAKE 正在使用我不使用的其他链接器明白为什么。

[ 89%] Building C object CMakeFiles/F4cmake.elf.dir/Src/main.c.obj
[ 94%] Building C object CMakeFiles/F4cmake.elf.dir/Src/stm32f4xx_it.c.obj
[100%] Linking C executable F4cmake.elf.exe
c:/gnutoolchain/9_2019_q4_major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld.exe: cannot find : Invalid argument
collect2.exe: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/F4cmake.elf.dir/build.make:338: F4cmake.elf.exe] Error 1
make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/F4cmake.elf.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

我没有看到我的失败。

  1. 谁能告诉我我做错了什么?
  2. 为什么 make 使用不同的链接器?
  3. 如何修复 CMakeLists.txt 文件,使 Make 可以生成 *.elf 输出文件?

谢谢

【问题讨论】:

  • 请将您的日志作为文本发布在您的问题帖子中。请不要发布日志输出的图像
  • 错误消息cannot find : Invalid argument 闻起来就像您的链接器标志中有一些 empty 字符串。使用make VERBOSE=1,您可能会看到用于链接的完整命令行。至于设置变量CMAKE_CXX_LINK_EXECUTABLE注意,这是不是可执行文件而是规则;请参阅answer 了解更多信息。
  • 还要注意,像CMAKE_C_COMPILERCMAKE_SYSTEM_NAME 这样的编译器特定 设置通常是单独的toolchain 文件的一部分,而不是CMakeLists.txt 文件的一部分。您是否注意到 CMake 输出中的 Check for working C compiler: C:/cygwin/bin/cc 行?这是因为 CMake 将您的项目视为使用主机编译器,而不是被交叉编译。工具链设置(作为CMAKE_TOOLCHAIN_FILE 传递的文件)和代码(CMakeLists.txt)的分离使您的项目真正跨平台。
  • 感谢您的建议。我有几个问题,为什么上面的代码不起作用。我创建了一个 toolchain.cmake 文件。我对编译器/链接器设置以及它们的编写方式也有疑问。显然,在 Windows 中,需要将所有参数写在一行中,而不是将它们分开。就这样。我将用运行代码回答这篇文章。如果你喜欢,你可以检查代码。谢谢

标签: cmake gnu-make stm32 stm32f4discovery stm32f4


【解决方案1】:

我回答我自己的问题。

重要的是,所有参数例如CMAKE_C_FLAGS 在一行,否则make文件创建失败。

工具链cmake文件的代码为:

include(CMakeForceCompiler)

# set the CMake-identifier of the target paltform to build for
set (CMAKE_SYSTEM_NAME Generic)
# set the CMake-identifier of the target architecture to build for
set (CMAKE_SYSTEM_PROCESSOR arm)

# set definitions
add_definitions(-DSTM32F407xx)
add_definitions(-DUSE_STM32F4_DISCO)
add_definitions(-DUSE_HAL_DRIVER)

# set toolchain path
set(TOOLCHAIN_DIR C:/GnuToolChain/9_2019_q4_major/bin)

# specify cross compiler
set(CMAKE_ASM_COMPILER ${TOOLCHAIN_DIR}/arm-none-eabi-as.exe)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/arm-none-eabi-gcc.exe)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/arm-none-eabi-g++.exe)
set(CMAKE_OBJCOPY ${TOOLCHAIN_DIR}/arm-none-eabi-objcopy.exe)
set(CMAKE_OBJDUMP ${TOOLCHAIN_DIR}/arm-none-eabi-objdump.exe)
set(CMAKE_SIZE ${TOOLCHAIN_DIR}/arm-none-eabi-size.exe)

# set C compiler flags
set(CMAKE_C_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")

# set C++ compiler flags
set(CMAKE_CXX_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")

# set Linker Script File
set(LINKER_SCRIPT D:/STM32Cube_FW_F4_V1.24.0/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/SW4STM32/STM32F4-Discovery/STM32F407VGTx_FLASH.ld)

# set linker flags. The only important settings are -T ${} and -Wl,--gc-sections otherwise creating of makefile will not work
set(CMAKE_EXE_LINKER_FLAGS  "-T ${LINKER_SCRIPT} -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -specs=nosys.specs -specs=nano.specs -Wl,--gc-sections -o -lm")

# where is the target located
set(CMAKE_FIND_ROOT_PATH)

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

CMakeLists.txt 的代码如下:

cmake_minimum_required (VERSION 3.15)

# set project name and enable the languages 'C' and 'ASM'
project(F4cmake C ASM)

# set the project name
set(TARGET F4cmake)

# set location of project
set(PRJ_DIR ../../../../..)

# set startup file
set(STARTUP ${PRJ_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.s)
message (STATUS "[DBG]: ${STARTUP}")

# set system file for µController
set(SYSTEM ${PRJ_DIR}/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/Src/system_stm32f4xx.c)

# set paths
set(HAL_PATH ${PRJ_DIR}/Drivers/STM32F4xx_HAL_Driver)
set(CMSIS_PATH ${PRJ_DIR}/Drivers/CMSIS)
set(BSP_PATH ${PRJ_DIR}/Drivers/BSP)

# set CMSIS files needed for the project
set(CMSIS_SRCS  
  ${CMSIS_PATH}/Device/ST/STM32F4xx/Include/stm32f4xx.h
  ${CMSIS_PATH}/Device/ST/STM32F4xx/Include/stm32f407xx.h
  ${CMSIS_PATH}/Core/Include/cmsis_gcc.h
  ${CMSIS_PATH}/Core/Include/cmsis_armcc.h
  ${CMSIS_PATH}/Core/Include/cmsis_compiler.h
  ${CMSIS_PATH}/Core/Include/cmsis_version.h
  ${CMSIS_PATH}/Core/Include/core_cm4.h
  ${CMSIS_PATH}/Core/Include/mpu_armv7.h
)

# set HAL files needed for the project
set(HAL_SRCS
  ${HAL_PATH}/Src/stm32f4xx_hal_pwr.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_pwr.h
  ${HAL_PATH}/Src/stm32f4xx_hal_cortex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_cortex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_gpio.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_gpio.h
  ${HAL_PATH}/Src/stm32f4xx_hal_flash.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_flash.h
  ${HAL_PATH}/Src/stm32f4xx_hal_spi.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_spi.h
  ${HAL_PATH}/Src/stm32f4xx_hal_rcc.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_rcc.h
  ${HAL_PATH}/Src/stm32f4xx_hal_flash_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_flash_ex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_rcc_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_rcc_ex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_i2c.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_i2c.h
  ${HAL_PATH}/Src/stm32f4xx_hal.c
  ${HAL_PATH}/Inc/stm32f4xx_hal.h
  ${HAL_PATH}/Src/stm32f4xx_hal_pwr_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_pwr_ex.h
  ${HAL_PATH}/Src/stm32f4xx_hal_dma.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_dma.h
  ${HAL_PATH}/Src/stm32f4xx_hal_i2c_ex.c
  ${HAL_PATH}/Inc/stm32f4xx_hal_i2c_ex.h
)

# set BSP files needed for the project
SET (BSP_SRCS
  ${BSP_PATH}/STM32F4-Discovery/stm32f4_discovery.c
  ${BSP_PATH}/STM32F4-Discovery/stm32f4_discovery.h
)
message (STATUS "[DBG]: ${BSP_SRCS}")

# set Application files needed for the project
SET (APP_SRCS
  Src/main.c
  Src/stm32f4xx_it.c
  Inc/main.h
  Inc/stm32f4xx_hal_conf.h
  Inc/stm32f4xx_it.h
)
message (STATUS "[DBG]: ${APP_SRCS}")

# include directories for the project
include_directories (
  ${CMSIS_PATH}/Device/ST/STM32F4xx/Source/Templates/gcc
  Src
  Inc
  ${BSP_PATH}/STM32F4-Discovery
  ${HAL_PATH}/Src
  ${HAL_PATH}/Inc
  ${HAL_PATH}/Inc/Legacy
  ${CMSIS_PATH}/Core/Include
  ${CMSIS_PATH}/Device/ST/STM32F4xx/Include
)

# configure assembler due to the startup file, which is an assembler file
set_source_files_properties(${STARTUP} PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp")
set_property(SOURCE ${STARTUP} PROPERTY LANGUAGE C)

# Summerize all sources
SET(USER_SOURCES ${STARTUP} ${SYSTEM} ${CMSIS_SRCS} ${HAL_SRCS} ${BSP_SRCS} ${APP_SRCS} ${LINKER_SCRIPT})
message(STATUS "[DBG]: ${USER_SOURCES}")

# 
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${TARGET}.map")

# create an *.elf output file
add_executable(${TARGET}.elf ${USER_SOURCES})

# create possibility to create a *.bin file
add_custom_target (${TARGET}.bin DEPENDS ${TARGET}.elf COMMAND ${CMAKE_OBJCOPY} -O binary ${TARGET}.elf ${TARGET}.bin)

# create possibility to create a *.list file
add_custom_target (${TARGET}.lst DEPENDS ${TARGET}.elf COMMAND ${CMAKE_OBJDUMP} -Sdh ${TARGET}.elf > ${TARGET}.lst)

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多