2017-04-30 2 views
0

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" 

Répondre

2

Il suffit de mettre un variable_watch(ARDUINO_SDK_PATH) en haut de votre CMakeLists.txt.

Références

+0

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

+0

@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

+0

Cela semble n'avoir aucun effet .. – frans