Modifier: la réponse acceptée ne résout pas encore mon problème mais elle a répondu à la question que j'ai posée - si vous pouvez m'aider avec mon problème actuel décrit ci-dessous, vous pourriez répondre à la question this.Comment tracer une valeur de variable perdue dans CMake?
J'ai un CMake projet qui utilise un cadre qui a besoin d'une variable à fixer (à savoir https://github.com/queezythegreat/arduino-cmake, qui a besoin ARDUINO_SDK_PATH
)
Étrangement après avoir mis cette variable sur la ligne de commande il faut d'abord une valeur mais on dirait qu'il disparaît après un moment.
Je suis en
cmake -DARDUINO_SDK_PATH=/path/to/sdk ..
.. et d'obtenir un message d'erreur qui me dit que ce ne soit pas réglé. L'impression de la valeur au sommet de ma CMakeLists.txt
et profondément à l'intérieur de ce cadre dans lequel la variable est en cours de vérification me donne quelque chose comme ceci:
>>> ARDUINO_SDK_PATH (beginning): '/home/me/project/arduino-1.8.2'
>>> ARDUINO_SDK_PATH (before check): '/home/me/project/arduino-1.8.2'
-- The C compiler identification is GNU 6.2.0
-- The CXX compiler identification is GNU 6.2.0
-- Check for working C compiler: /usr/bin/avr-gcc
>>> ARDUINO_SDK_PATH (before check): ''
CMake Error at /home/me/project/arduino-cmake/cmake/ArduinoToolchain.cmake:84 (message):
Could not find Arduino SDK (set ARDUINO_SDK_PATH)!
Call Stack (most recent call first):
/home/me/project/build/CMakeFiles/3.6.2/CMakeSystem.cmake:6 (include)
/home/me/project/build/CMakeFiles/CMakeTmp/CMakeLists.txt:3 (project)
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Configuring incomplete, errors occurred!
See also "/home/me/project/build/CMakeFiles/CMakeOutput.log".
Il semble donc que ARDUINO_SDK_PATH
perd sa valeur en quelque sorte. Je n'ai pas trouvé une commande réelle où il est assigné une valeur donc je ne sais pas comment procéder .. Je peux maintenant bien sûr ajouter du code à mon projet CMake partout pour imprimer la valeur de ARDUINO_SDK_PATH
mais je me demande s'il y a un façon intégrée de tracer des valeurs variables.
J'ai essayé cmake --trace ..
et cmake --trace-expand ..
mais la sortie ne semble pas utile ..
Système: Fedora 25 avec CMake 3.6.2
Mise à jour
Merci à Florian J'ai ajouté variable_watch(ARDUINO_SDK_PATH)
comme ma première ligne en CMakeLists.txt
et maintenant mes lignes de trace variables (message()
) ressemblent à ceci:
CMake Debug Log at arduino-cmake/cmake/ArduinoToolchain.cmake:41 (MESSAGE):
Variable "ARDUINO_SDK_PATH" was accessed using READ_ACCESS with value
"/home/me/project/arduino-1.8.2".
Call Stack (most recent call first):
/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:98 (include)
CMakeLists.txt:10 (project)
>>> ARDUINO_SDK_PATH (before check): /home/me/project/arduino-1.8.2
J'ai environ 30 messages comme celui-ci mais suivre quelques lignes de trace sans la valeur et sans le message de trace.
Il semble donc que la ARDUINO_SDK_PATH
variable devient remplacé par un nouveau qui est vide et qui ne remonte pas plus ..
Reproduire
Afin de rendre ce comportement reproductible j'ai chargé le code: https://github.com/frans-fuerst/trinket_led
Remarque: le CMakeLists.txt
fourni ne contient pas encore de code utile - il reproduit juste l'erreur.
Vous devez télécharger le Arduino-SDK, l'extraire et de fournir le chemin sur la ligne de commande:
tar xvf ~/Downloads/arduino-1.8.2-linux64.tar.xz
git clone https://github.com/frans-fuerst/trinket_led
cd trinket_led
git submodules update --init
mkdir build
cd build
cmake -DARDUINO_SDK_PATH=/path/to/arduino-1.8.2 ..
Note: il y a une commande find_path
dans ArduinoToolchain.cmake
qui semble suspect. Mais vous pouvez l'enlever avec le même résultat ..
CMakeFiles/CMakeOutput.log
The target system is: Arduino - -
The host system is: Linux - 4.10.12-200.fc25.x86_64+debug - x86_64
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
Compiler: /usr/bin/avr-gcc
Build flags:
Id flags:
The output was:
0
Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
The C compiler identification is GNU, found in "/home/frans/_HOME/1704_trinket_led/build/CMakeFiles/3.6.2/CompilerIdC/a.out"
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
Compiler: /usr/bin/avr-g++
Build flags:
Id flags:
The output was:
0
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
The CXX compiler identification is GNU, found in "/home/frans/_HOME/1704_trinket_led/build/CMakeFiles/3.6.2/CompilerIdCXX/a.out"
Ceci est au moins très utile - vous donnerait + 10 si cela était possible. Mais maintenant j'observe un comportement beaucoup plus étrange: je reçois un message 'Variable" ARDUINO_SDK_PATH "a été accédé en utilisant READ_ACCESS avec la valeur ..' avec la valeur correcte environ 30 fois MAIS SUDDENLY ce message n'est plus imprimé et mes messages de trace afficher les valeurs vides On dirait que la variable elle-même (qui est en train d'être tracée) est remplacée (comme dans un 'EXTERNAL_PROJECT') – frans
@frans Strange. Mais vous pouvez essayer d'ajouter 'set (CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)' (juste parce que votre message d'erreur implique que CMake n'est pas capable de lier un exécutable dans 'try_compile()'). – Florian
Cela semble n'avoir aucun effet .. – frans