2016-05-20 4 views
0

ファイルツールチェーンに永続する未、要約として:CMakeのコマンドラインの定義は、私はcmakeのクロスコンパイラツールチェインファイルを持っている

~/CMakeTest/output $ cmake -DTC_PATH:PATH=/opt/toolchain -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ../ 
:私は、ツールチェインファイルだけでなく、TC_PATHを設定し、cmakeのを呼び出す

set(CMAKE_SYSTEM_NAME Linux) 
if(DEFINED TC_PATH) 
    message(STATUS " TC_PATH IS defined. ${TC_PATH}") 
else() 
    message(FATAL_ERROR " TC_PATH not defined.") 
endif() 

set(CMAKE_C_COMPILER ${TC_PATH}/usr/bin/i586-linux/i586-linux-gcc) 
set(CMAKE_CXX_COMPILER ${TC_PATH}/usr/bin/i586-linux/i586-linux-g++) 
set(CMAKE_LINKER ${TC_PATH}/usr/bin/i586-linux/i586-linux-ld) 

cmakeがtoolchainファイルを複数回呼び出すようです。私はTC_PATHを設定することができますシェルで恒久的な環境変数の設定の外、どのように、

-- TC_PATH IS defined. /opt/toolchain 
-- TC_PATH IS defined. /opt/toolchain 
-- The C compiler identification is GNU 4.9.1 
-- The CXX compiler identification is GNU 4.9.1 
-- Check for working C compiler: /opt/toolchain/usr/bin/i586-linux/i586-linux-gcc 
CMake Error at /home/gnac/CMakeTest/toolchain.cmake:4 (message): 
    TC_PATH not defined. 
Call Stack (most recent call first): 
    /home/gnac/CMakeTest/output/CMakeFiles/3.0.2/CMakeSystem.cmake:6 (include) 
    CMakeLists.txt:2 (project) 

ので:最初の2時間で、TC_PATHチェックは成功しますが、後に、コンパイラを識別した後、それはエラーをスローしますコマンドラインで変数を変更して、cmake generateコマンドを実行している間にコンテキストに残りますか?

答えて

0

あなたのツールチェーンは自給自足する必要があります。失敗したステップは、キャッシュされた変数を取得していないtry_compile()です。

あなたがクロスコンパイルしているようなあなたのツールチェインファイルが見えない(それはCMAKE_SYSTEM_NAMEを持っていない)ので、あなたは(あなたが言及したようCCCXX環境変数を設定する以外に)次のいずれかを行うことができます

  1. それは(これはあなたが有効な言語によって異なります)ごCおよび/またはCXXコンパイラへの完全なパスを与えるのに十分だ、CMakeのは自動的に

    cmake -DCMAKE_C_COMPILER:PATH=/opt/toolchain/usr/bin/i586-linux/i586-linux-gcc 
         -DCMAKE_CXX_COMPILER:PATH=/opt/toolchain/usr/bin/i586-linux/i586-linux-g++ ... 
    
  2. あなたのGNUツールチェーンの残りの部分を検出します
  3. (ないすべてのオプションは、それに渡される可能性があるためか、選択のあなたのコンパイラ/リンカは、有効な実行可能ファイルを生成しないので)、コンパイラのテストをスキップするあなたのツールチェインに以下を追加します。

    set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "") 
    set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "") 
    

    それとも使用CMakeForceCompilerマクロですが、使用は「落胆しています。可能な場合は、このモジュールを使用しないでください。」

  4. を使用configure_file()(ちょうどproject()コールの前にそれを行うことを確認してください)あなたのツールチェーンファイルに

  5. をパスを入れて、あなたのツールチェインの可能なパスがある場合find_program()を好みます外部から設定することで知られています(例えばhere

参照

+0

フロリアン、私のツールチェインファイルは、実際にCMAKE_SYSTEM_NAME設定していません。質問をより簡潔にするために、私は「要約」版から除外しました。より完全で正確な質問を提供するために、私は今追加しました。ありがとう。 – gnac

関連する問題