在过去三天尝试和阅读之后,我仍然无法使用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)
有没有解决方案让这个massege得到解决?
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)
我也建议你查看这个链接。真的很有帮助link