Редактиране: приетият отговор все още не решава проблема ми, но отговори на въпроса, който зададох - ако можете да ми помогнете с действителния ми проблем, описан по-долу, може да отговорите този въпрос.
Имам CMake-проект, който използва рамка, която се нуждае от настройка на променлива (а именно https://github.com/queezythegreat/arduino-cmake, който се нуждае от ARDUINO_SDK_PATH
)
Странно, след като зададох тази променлива в командния ред, тя първо има стойност, но изглежда, че изчезва след известно време.
бягам
cmake -DARDUINO_SDK_PATH=/path/to/sdk ..
.. и получавам съобщение за грешка, което ми казва, че не е зададено. Отпечатването на стойността в горната част на моя CMakeLists.txt
и дълбоко в тази рамка, където се проверява променливата, ми дава нещо подобно:
>>> 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".
Така че изглежда, че ARDUINO_SDK_PATH
губи стойността си по някакъв начин. Не намерих действителна команда, на която да й е присвоена някаква стойност, така че не знам как да продължа. Сега, разбира се, мога да добавя код към моя CMake проект навсякъде, за да отпечатам стойността на ARDUINO_SDK_PATH
, но се чудя дали има вграден начин за проследяване на стойности на променливи.
Опитах cmake --trace ..
и cmake --trace-expand ..
, но резултатът не изглежда полезен..
Система: Fedora 25 с CMake 3.6.2
Актуализация
Благодарение на Florian добавих variable_watch(ARDUINO_SDK_PATH)
като мой първи ред в CMakeLists.txt
и сега моите променливи линии за проследяване (message()
) изглеждат така:
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
Имам около 30 съобщения като това, но следват няколко реда за проследяване без стойността и без съобщението за проследяване.
Така че изглежда, че променливата ARDUINO_SDK_PATH
се заменя с нова, която е празна и която вече не се проследява.
Възпроизвеждане
За да направя това поведение възпроизводимо, качих кода: https://github.com/frans-fuerst/trinket_led
Забележка: предоставеният CMakeLists.txt
все още не съдържа полезен код - той просто възпроизвежда грешката.
Трябва да изтеглите Arduino-SDK, да го разархивирате и да предоставите пътя към командата линия:
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 ..
Забележка: има команда find_path
в ArduinoToolchain.cmake
, която изглежда подозрително. Но можете да го премахнете със същия резултат..
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"