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?
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 "")
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 NONE
PROJECT
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.
Vous pouvez définir le drapeau CMAKE_
set(CMAKE_C_COMPILER_WORKS 1)
pour supprimer d'autres vérifications du compilateur.