web-dev-qa-db-fra.com

Puis-je ignorer les tests du compilateur cmake ou éviter "erreur: option non reconnue '-rdynamic'"

options de compilation pour cmake (sous windows) pour ARM système cible mais quand j'exécute configure, il démarre les tests du compilateur:

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

Utilisation de Yagatdo 4.6. * Chaîne d'outils de compilation croisée

Comment puis-je ignorer ces tests ou corriger l'erreur -rdynamic que j'obtiens?

29
cnd

Vous pouvez ignorer les vérifications du compilateur en ajoutant NONE à votre appel project:

project(<projectname> NONE)

mais cela peut avoir des effets assez étendus. Pour plus de détails, exécutez

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 feriez mieux de voir s'il existe un moyen de corriger le -rdynamic drapeau.

ÉDITER:

Il semble que ce soit identifié comme un bug qui n'est toujours pas résolu. Les commentaires dans le rapport de bogue mentionnent l'ajout des lignes suivantes comme solution de contournement (probablement avant votre appel project):

set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
26
Fraser

Il semble que vous cibliez réellement autre chose que Linux, vous devez donc dire à cmake que vous effectuez une compilation croisée pour le cas générique:

SET(CMAKE_SYSTEM_NAME Generic)

Suivi par (en option, mais agréable à préciser):

SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_CROSSCOMPILING 1)

Cependant, si vous spécifiez (ce que vous avez probablement fait car cela est indiqué dans de nombreux exemples en ligne):

SET(CMAKE_SYSTEM_NAME Linux)

Ensuite, cmake chargera les fichiers de configuration à partir (supposons la version 2.8) du fichier:

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

à partir duquel il est susceptible de charger:

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

Ici le -rdynamic L'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 cela se fait en spécifiant NONE comme argument PROJECT, il semble que le paramètre CMAKE_SYSTEM_NAME (à autre chose que Linux, par exemple Generic) est ce que vous voulez réellement faire.

23
Anne van Rossum

Vous pouvez définir l'indicateur CMAKE_ <LANG> _COMPILER_WORKS, par exemple:

set(CMAKE_C_COMPILER_WORKS 1)

pour supprimer les vérifications supplémentaires du compilateur.

22
adiog

Si vous compilez simplement une bibliothèque statique et que vous voulez éviter d'avoir cmake test que le compilateur peut générer des binaires, vous pouvez définir la variable CMAKE_TRY_COMPILE_TARGET_TYPE.

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

https://cmake.org/cmake/help/latest/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.html

1
awelkie