Puis-je sauter les tests de compilation de cmake ou éviter "erreur: option non reconnue '- rdynamic'"

options de compilation pour cmake (sur windows) pour ARMER le système cible, mais quand je lance le configurer de départ du compilateur tests:

CMake Error at D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
  The C compiler "D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe" is not
  able to compile a simple test program.

  It fails with the following output:

   Change Dir: D:/merge/complex/build/CMakeFiles/CMakeTmp



  Run Build Command:D:/PROGRA~1/YAGART~1/bin/make.exe "cmTryCompileExec/fast"

  D:/PROGRA~1/YAGART~1/bin/make.exe -f
  CMakeFiles/cmTryCompileExec.dir/build.make
  CMakeFiles/cmTryCompileExec.dir/build

  make.exe[1]: Entering directory
  `D:/merge/complex/build/CMakeFiles/CMakeTmp'

  "D:/Program Files/CMake 2.8/bin/cmake.exe" -E cmake_progress_report
  D:/merge/complex/build/CMakeFiles/CMakeTmp/CMakeFiles 1

  Building C object CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o

  "D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe" -o
  CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o -c
  D:/merge/complex/build/CMakeFiles/CMakeTmp/testCCompiler.c

  Linking C executable cmTryCompileExec

  "D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe"
  "CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o" -o cmTryCompileExec
  -rdynamic 

  arm-none-eabi-gcc.exe: error: unrecognized option '-rdynamic'

  make.exe[1]: *** [cmTryCompileExec] Error 1

En Utilisant Yagatdo 4.6.* chaîne d'outils de compilation croisée

Comment puis-je sauter ces tests ou corriger l'erreur dynamique que j'obtiens?

24
demandé sur Cynede 2012-05-15 14:42:33

3 réponses

vous pouvez sauter les vérifications du compilateur en ajoutant NONE pour votre project appel:

project(<projectname> NONE)

mais cela peut avoir des effets assez importants. Pour plus de détails, run

cmake --help-command project

Je ne suis pas familier avec ARM, donc ce n'est probablement pas votre meilleure option ici. Je suppose que vous seriez mieux de voir s'il y a un moyen de réparer le -rdynamic drapeau.

EDIT:

on dirait que c'était identifié comme un bogue qui est effectivement encore en suspens. Les commentaires dans le rapport de bogue mentionnent l'ajout des lignes suivantes comme solution de contournement (probablement avant votre project):

set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
23
répondu Fraser 2012-05-15 12:00:31

il semble que vous cibliez en fait quelque chose d'autre que Linux, donc vous devriez dire à cmake que vous êtes en compilation croisée pour le cas Générique:

SET(CMAKE_SYSTEM_NAME Generic)

suivi de (optionnellement, mais agréable à spécifier):

SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_CROSSCOMPILING 1)

cependant, si vous spécifiez (ce que vous avez probablement fait parce que c'est indiqué dans beaucoup d'exemples en ligne):

SET(CMAKE_SYSTEM_NAME Linux)

puis cmake chargera les fichiers de configuration à partir du fichier:

/usr/share/cmake-2.8/Modules/Platform/Linux.cmake

à partir de laquelle il est susceptible de charge:

/usr/share/cmake-2.8/Modules/Platform/Linux-GNU.cmake

voici le -rdynamic indicateur est défini pour des raisons historiques:

macro(__linux_compiler_gnu lang)
  # We pass this for historical reasons.  Projects may have
  # executables that use dlopen but do not set ENABLE_EXPORTS.
  set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic")
endmacro()

plutôt que de désactiver les tests comme on le fait en spécifiant NONEPROJECT argument, il semble que le réglage de l' CMAKE_SYSTEM_NAME (pour autre chose que Linux, par exemple Generic) est-ce que vous voulez vraiment faire.

22
répondu Anne van Rossum 2015-02-25 23:33:30

Vous pouvez définir le drapeau CMAKE__COMPILER_WORKS, par exemple.:

set(CMAKE_C_COMPILER_WORKS 1)

pour supprimer d'autres vérifications du compilateur.

14
répondu adiog 2015-06-04 11:02:03