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?
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.
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 "")
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.
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.
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