2015-04-16 118 views
0

我使用https://launchpad.net/gcc-arm-embedded工具鏈進行cortex m4開發。cmake交叉編譯GNU工具

我在Windows7機器上,我已經安裝了多個版本的GNU ARM工具鏈。 C:\ Program Files文件(x86)的\ GNU工具ARM嵌入式\ 4.7 2013q2 4.8 2013q4 4.9 2014q4 4.9 2015q1

我用的是最新版本的CMake 3.2.2

我怎麼能強迫一個特殊的作爲例子的工具鏈4.9 2014q4 ???

我在網上看了很多東西,我也搜索一些用於ARM的工具鏈文件。

所以文件是一堆的所有信息,我的網站和或github上上找到...但它doesn't如我所料

這裏IST文件工作。

啓動文件

include(CMakeForceCompiler) 
set(CMAKE_SYSTEM_NAME Generic) 
set(CMAKE_SYSTEM_PROCESSOR cortex-m4) 
# cmake calls this file twice 
#if(NOT cross_configure) 
#set(cross_configure 1) 
## standard way 
#CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) 
#CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU) 
# search for the toolchain 
if(NOT TOOLCHAIN_DIR) 
set(TOOLCHAIN_DIR "c:/Program Files (x86)/GNU Tools ARM Embedded/4.9 2014q4") 
else() 
message(STATUS ${TOOLCHAIN_DIR}) 
endif() 
find_program(GNU_ARM_C arm-none-eabi-gcc ${TOOLCHAIN_DIR}) 
find_program(GNU_ARM_CXX arm-none-eabi-g++ ${TOOLCHAIN_DIR}) 
find_program(GNU_ARM_OBJCOPY arm-none-eabi-objcopy ${TOOLCHAIN_DIR}) 
find_program(GNU_ARM_SIZE_TOOL arm-none-eabi-size ${TOOLCHAIN_DIR}) 
CMAKE_FORCE_C_COMPILER(${GNU_ARM_C} GNU) 
CMAKE_FORCE_CXX_COMPILER(${GNU_ARM_CXX} GNU) 
# works without  
#set(CMAKE_ASM_COMPILER ${GNU_ARM_C}) 
# Find the target environment prefix.. 
# First see where gcc is keeping libc.a 
execute_process(
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.a 
OUTPUT_VARIABLE CMAKE_INSTALL_PREFIX 
OUTPUT_STRIP_TRAILING_WHITESPACE 
) 
# Strip the filename off 
get_filename_component(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" PATH) 
# Then find the canonical path to the directory one up from there 
get_filename_component(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/.." REALPATH) 
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Install path prefix, prepended onto install directories.") 
message(STATUS "cross compiling with gnu tools ...") 
message(STATUS "toolchain prefix: ${CMAKE_INSTALL_PREFIX}") 
set(CMAKE_FIND_ROOT_PATH ${CMAKE_INSTALL_PREFIX}) 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 

年底文件

首先嚐試:

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-gnu-tools-arm-embedded-cortex-m4.cmake -G"MinGW Makefiles" ../ 

所以,我想它=>它的工作原理是使用從系統路徑的編譯器。 。最新版本在這條路上(4.9 2015q1)

第二個嘗試:

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-gnu-tools-arm-embedded-cortex-m4.cmake -DTOOLCHAIN_DIR="c:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4" -G"MinGW Makefiles" ../ 

=>我使用了源構建我刪除整個build目錄並重新運行.. =>但doesn't工作方式...... cmake的用途編譯器再次在路徑上。

第三次嘗試: 我重新啓動後,從系統路徑=>中移除編譯器。

但我想編寫一個工具鏈文件,它選擇特定版本/路徑上的編譯器......並且如果系統路徑上有版本,這也應該工作。

這是可能與cmake我搜查了很多,但我沒有找到解決辦法。

感謝您的幫助

回答

0

您必須指定編譯器的路徑,你也可以指定它們在你的工具鏈,但這不建議

set(CMAKE_C_COMPILER "C:/path/to/my/gcc-4.2") 
set(CMAKE_CXX_COMPILER "C:/path/to/my/gcc-4.2") 

取而代之的是,你可以通過在命令行的路徑:

cmake . -G "MinGW Makefiles" -D CMAKE_C_COMPILER="C:/MinGW2/bin/gcc.exe" -D CMAKE_CXX_COMPILER="C:/MinGW2/bin/g++.exe" 

我剛纔試過和它的作品,我在MinGW的另一個GCC,但升在MinGW2文件夾中添加一個。