2017-09-13 71 views
0

我注意到,CMake的安裝與衆多的模塊,如IAR編譯:如何在CMake(IAR)中使用不同的編譯器?

https://github.com/Kitware/CMake/blob/master/Modules/Compiler/IAR.cmake

在前面的問題,我問如何加載這個特殊的模塊。答案只是補充:

set(CMAKE_C_COMPILER iccarm.exe) 

在我的CMakeLists.txt

不幸的是我注意到,這是不夠的,因爲IAR.cmake永遠不會被真正使用。用下面的CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 

set(CMAKE_SYSTEM_NAME Generic) 
set(CMAKE_SYSTEM_PROCESSOR arm) 

set(CMAKE_C_COMPILER iccarm.exe) 

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) 

list(APPEND src src/main.c) 

project("foo" C) 

add_executable(foo ${src}) 

message(STATUS "IARARM_CMAKE_LOADED=${_IARARM_CMAKE_LOADED}") 
message(STATUS "IAR CMAKE_C_COMPILE_OBJECT=${CMAKE_C_COMPILE_OBJECT}") 

我得到這樣的輸出:

-- The C compiler identification is IAR 
-- Check for working C compiler: C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/arm/bin/iccarm.exe 
-- Check for working C compiler: C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/arm/bin/iccarm.exe -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- IARARM_CMAKE_LOADED= 
-- IAR CMAKE_C_COMPILE_OBJECT=<CMAKE_C_COMPILER> <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> 
-- Configuring done 
-- Generating done 
-- Build files have been written to: C:/Users/Ycr/Home/sandbox/cmake 

如果沒有定義IARARM_CMAKE_LOADEDCMAKE_C_COMPILE_OBJECT沒有--silent選項定義here

我怎麼能告訴CMake的使用IAR模塊?

回答

1

我慢慢開始意識到這個問題。

  • 您不應在CMakeLists.txt文件中定義編譯器。你添加它們作爲參數在命令行上像cmake -DCMAKE_C_COMPILER=iccarm.exe ... 編譯器檢測之前,您CMakeLists.txt文件被感動
  • 你確定你使用的是每晚構建,因爲你鏈接的文件是不是在relased建立,但將包含在通常發生CMake 3.10

下一次添加用於調用CMake的版本和命令行。你也有一些選擇,如--trace-expand,應該給你一個想法什麼(不)發生。

+0

嗯,我也開始明白了。 '--silent'的修改是在3個月前添加的,所以這是一個非常近期的變化,我的'CMake' for windows是3.9.1,而不是3.9.2。當我直接從GitHub(以及來自我的Cygwin安裝的CMake上的3.9.2)查看源代碼時,我感到困惑。 – nowox

+0

'--trace-expand'對我幫助很大! – nowox

+0

雖然我仍然感到困惑。您所做的[d8e6cd9ed](https://github.com/Kitware/CMake/commit/d8e6cd9ed8bfee9073cff26cb654bc01e653b0b9)似乎不是** v3.9.2 **的一部分,但您的更改恰好在** v3.9.0- RC4 **。這就像死衚衕。它的組織如何,Git存儲庫到處都充滿了嘈雜的'Merge branch'release-3.9''。 – nowox