0

好吧,在过去三天的尝试和阅读之后,我仍然无法使用 CMAKE 编译和运行一个简单的 c-Project。

我在 Windows 上使用 YAGARTO-arm-none-eabi-gcc 编译器/链接器,并且已经安装了 Cygwin 和 mingw。在 ecplise-CDT 上创建一个简单的 c-make 项目后,我想让 cmake 为我构建一个 MAKEFILE。我的 yagarto.cmake 看起来像这样:

 # GCC toolchain prefix
IF(NOT TOOLCHAIN_PREFIX)
     SET(TOOLCHAIN_PREFIX "C:/yagarto-20121222")
     MESSAGE(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX})
ENDIF()

IF(NOT TARGET_TRIPLET)
    SET(TARGET_TRIPLET "arm-none-eabi")
    MESSAGE(STATUS "No TARGET_TRIPLET specified, using default: " ${TARGET_TRIPLET})
ENDIF()

SET(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
SET(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/include)
SET(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/lib)

SET(CMAKE_SYSTEM_NAME Windows CACHE INTERNAL "system name")
SET(CMAKE_SYSTEM_PROCESSOR arm CACHE INTERNAL "processor")

SET(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc CACHE INTERNAL "c compiler")
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-g++ CACHE INTERNAL "cxx compiler")
SET(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-as CACHE INTERNAL "asm compiler")

SET(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objcopy CACHE INTERNAL "objcopy")
SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objdump CACHE INTERNAL "objdump")

SET(CMAKE_C_FLAGS "-isystem ${TOOLCHAIN_INC_DIR} -mthumb -mcpu=cortex-m3 -fno-builtin -Wall -std=gnu99 -fdata-sections -ffunction-sections" CACHE INTERNAL "c compiler flags")
SET(CMAKE_CXX_FLAGS "-isystem ${TOOLCHAIN_INC_DIR} -mthumb -mcpu=cortex-m3 -fno-builtin -Wall -fdata-sections -ffunction-sections" CACHE INTERNAL "cxx compiler flags")
SET(CMAKE_ASM_FLAGS "-mthumb -mcpu=cortex-m3" CACHE INTERNAL "asm compiler flags")

SET(CMAKE_C_FLAGS_DEBUG "-g -c -O2 -mcpu=cortex-m3 -mthumb -mfpu=vfp -mfloat-abi=soft -Wa,-meabi=5 -ffunction-sections -fno-common -fno-exceptions -pedantic -Wall -Wextra -Wno-missing-field-initializers" CACHE INTERNAL "c debug compiler flags")
SET(CMAKE_CXX_FLAGS_DEBUG $(CMAKE_C_FLAGS_DEBUG) CACHE INTERNAL "cxx debug compiler flags")
SET(CMAKE_ASM_FLAGS_DEBUG "-g -gstabs+" CACHE INTERNAL "asm debug compiler flags")

SET(CMAKE_C_FLAGS_RELEASE "-Os -flto" CACHE INTERNAL "c release compiler flags")
SET(CMAKE_CXX_FLAGS_RELEASE "-Os -flto" CACHE INTERNAL "cxx release compiler flags")
SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm release compiler flags")

SET(CMAKE_EXE_LINKER_FLAGS "-o -mcpu=cortex-m3 -mthumb -nostartfiles -Wl,-TCMakeTst.ld,-M=CMakeTst.map,--gc-sections" CACHE INTERNAL "exe link flags")
SET(CMAKE_MODULE_LINKER_FLAGS "-L${TOOLCHAIN_LIB_DIR} -mthumb -mcpu=cortex-m3 -flto" CACHE INTERNAL "module link flags")
SET(CMAKE_SHARED_LINKER_FLAGS "-L${TOOLCHAIN_LIB_DIR} -mthumb -mcpu=cortex-m3 -flto" CACHE INTERNAL "shared link flags")

SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET} CACHE INTERNAL "cross root directory")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "")
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE INTERNAL "")
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE INTERNAL "")

所以这也是我的 CMakeLists.txt

SET(CMAKE_TOOLCHAIN_FILE CMakeTst.cmake)
SET(CMAKE_GENERATOR "Unix Makefiles")
SET(CMAKE_EXECUTABLE_SUFFIX  elf)
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
cmake_minimum_required (VERSION 2.6)
project(CMakeTst) 
add_executable(CMakeTst main.c)

有什么办法可以解决这个按摩??

  The C compiler "C:/yagarto-20121222/bin/arm-none-eabi-gcc" is not able to
  compile a simple test program.

  It fails with the following output:

  Change Dir: C:/eclipseProjekte/CMakeTst/CMakeFiles/CMakeTmp

谢谢


@georges 这是我的 Cmakelistfile 试试这个,它也适用于 eclipse

#SET(CMAKE_TOOLCHAIN_FILE MinProj.cmake)
INCLUDE(CMakeForceCompiler)
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_C_COMPILER_FORCED TRUE)
CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) 
CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-gcc GNU) 

INCLUDE_DIRECTORIES("C:\\yagarto-20121222\\arm-none-eabi\\include")
SET(CMAKE_BUILD_FLAGS "-Wa,-meabi=5 -ffunction-sections -fno-common -fno-exceptions -pedantic -Wall -Wextra -Wno-missing-field-initializers -nostartfiles -O0 -mcpu=cortex-m3 -mthumb -mfpu=vfp -mfloat-abi=soft")
SET(CMAKE_LINKER_FLAGS "mcpu=cortex-m3 -mthumb -nostartfiles -Wl,-T${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.ld,-M=${CMAKE_PROJECT_NAME}.map,--gc-sectionsl ${CMAKE_EXE_LINKER_FLAGS}" CACHE INTERNAL "exe link flags")

SET(CMAKE_GENERATOR "Unix Makefiles")
cmake_minimum_required (VERSION 2.6)
project(iceJupi) 
add_executable(${CMAKE_PROJECT_NAME}.elf main.c startup_stm32f10x_hd.o)

我也建议您检查此链接。真的很有帮助链接

4

0 回答 0