2017-04-30 5 views
0

を編集:受け入れられた回答ではまだ私の問題は解決していませんが、私が尋ねた質問に答えました。実際に問題が発生した場合は、thisと答えてください。 CMakeで失われた変数値をトレースするには?

は、私は、コマンドライン上の変数は、それが第1の値を有していることを設定した後

不思議(ARDUINO_SDK_PATH必要即ちhttps://github.com/queezythegreat/arduino-cmakeを)設定する変数を必要なフレームワークを利用するCMakeのプロジェクトを持っていますそれはしばらくして消えるように見えます。

私は..

cmake -DARDUINO_SDK_PATH=/path/to/sdk .. 

を実行しているし、それが設定されていないことを私に告げるエラーメッセージが表示されますよ。 ARDUINO_SDK_PATHが、それは何らかの形で値だ失っようなので、それが見えます

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

:私のCMakeLists.txtの最上部に値をプリントアウトし、変数がチェックされているこのフレームワークの奥深くには、私にこのような何かを提供します。私は実際のコマンドを見つけることができませんでしたので、私はどのように進むべきかわかりません。私は今どこでもARDUINO_SDK_PATHの値を印刷するために私のCMakeプロジェクトにコードを追加することができますが、変数値をトレースする組み込みの方法。

私はcmake --trace ..cmake --trace-expand ..を試してみましたが、出力は役に立つようではありません。..

システム:CMakeの3.6.2

とのFedora 25の更新私が追加したフロリアンへ

感謝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にはまだ有用なコードは含まれていません。エラーを再生するだけです。

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 .. 

注:疑わしいArduinoToolchain.cmakefind_pathコマンドがある

あなたは、Arduino-SDKをダウンロードし、それを抽出し、コマンドラインでパスを提供する必要があります。しかし、あなたは同じ結果でそれを削除することができます..

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" 

答えて

2

はちょうどあなたのCMakeLists.txtの上部にvariable_watch(ARDUINO_SDK_PATH)を置きます。

参照

+0

これは、少なくとも非常に有用である - それが可能だった場合、あなたに10を与えるだろう。しかし、今私は非常に見知らぬ振る舞いを観察しています。ARDUINO_SDK_PATHに "Variable"というメッセージが表示されます。READ_ACCESS with value ..を約30回使ってアクセスしましたが、このメッセージはもう印刷されません。空の値を表示します。トレースされている変数自体が(EXTERNAL_PROJECT'のように)置き換えられるように見えます。 – frans

+0

@frans Strange。しかし、 'set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)'を追加しようとする可能性があります(単に、あなたのエラーメッセージがCMakeが 'try_compile()'で実行可能ファイルをリンクできないことを意味するからです)。 – Florian

+0

これは効果がないようです。 – frans

関連する問題