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_LOADED
和CMAKE_C_COMPILE_OBJECT
沒有--silent
選項定義here
我怎麼能告訴CMake的使用IAR模塊?
嗯,我也開始明白了。 '--silent'的修改是在3個月前添加的,所以這是一個非常近期的變化,我的'CMake' for windows是3.9.1,而不是3.9.2。當我直接從GitHub(以及來自我的Cygwin安裝的CMake上的3.9.2)查看源代碼時,我感到困惑。 – nowox
'--trace-expand'對我幫助很大! – nowox
雖然我仍然感到困惑。您所做的[d8e6cd9ed](https://github.com/Kitware/CMake/commit/d8e6cd9ed8bfee9073cff26cb654bc01e653b0b9)似乎不是** v3.9.2 **的一部分,但您的更改恰好在** v3.9.0- RC4 **。這就像死衚衕。它的組織如何,Git存儲庫到處都充滿了嘈雜的'Merge branch'release-3.9''。 – nowox