2017-09-13 1 views
0

J'ai remarqué que CMake est installé avec de nombreux modules tels que le compilateur IAR:Comment utiliser un compilateur différent avec CMake (IAR)?

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

Dans une question précédente, j'ai demandé comment charger ce module particulier. La réponse était simplement d'ajouter:

set(CMAKE_C_COMPILER iccarm.exe) 

sur mon CMakeLists.txt.

Malheureusement, j'ai remarqué que ce n'est pas suffisant car le IAR.cmake n'est jamais vraiment utilisé. Avec les éléments suivants 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}") 

Je reçois cette sortie:

-- 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 est pas défini et CMAKE_C_COMPILE_OBJECT n'a pas l'option --silent définie here

Comment puis-je savoir CMake utiliser le module IAR?

Répondre

1

Je commence lentement à réaliser les problèmes. Vous ne devez pas définir le compilateur dans le fichier CMakeLists.txt.

  • Vous les ajoutez en tant qu'argument sur la ligne de commande comme cmake -DCMAKE_C_COMPILER=iccarm.exe ... La détection du compilateur se produit généralement avant que votre fichier CMakeLists.txt ne soit touché
  • Etes-vous sûr d'utiliser la compilation nocturne, car le fichier que vous avez lié n'est pas dans les versions modifiées mais sera inclus dans CMake 3.10

Ajoutez les versions et la ligne de commande utilisées pour invoquer CMake la prochaine fois. Aussi, vous avez quelques options comme --trace-expand qui devrait vous donner une idée de ce qui se passe (ne se passe pas).

+0

Eh bien, je commence à comprendre aussi. La modification avec le '--silent' a été ajoutée il y a 3 mois donc c'est un changement assez récent et mon' CMake' pour windows était 3.9.1, pas 3.9.2. Comme je regardais les sources directement à partir de GitHub (et de CMake sur mon installation de Cygwin qui était 3.9.2), j'ai été confus. – nowox

+0

'--trace-expand' m'a beaucoup aidé! – nowox

+0

Je suis toujours confus cependant. Le [d8e6cd9ed] (https://github.com/Kitware/CMake/commit/d8e6cd9ed8bfee9073cff26cb654bc01e653b0b9) que vous avez fait ne semble pas faire partie de ** v3.9.2 **, mais votre modification est juste après ** v3.9.0- rc4 **. C'est comme une impasse. Comment est-il organisé, le dépôt Git est plein de bruine 'Merge branch' release-3.9'' partout. – nowox