2012-05-11 11 views
5
IF(UNIX) 
    # CROSS COMPILATION! ON/OFF 
    #SET(CMAKE_C_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc) 
    #SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++) 
    #SET(CMAKE_C_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-gcc) 
    #SET(CMAKE_CXX_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-g++) 

ここで私はクロスコンパイルのために何をしていますか?私は(ないcmakeのために)にするためにパスCROSS_COMPILEをしない場合には、このオプションは、メークファイルするcmakeの必見パスように、システムのデフォルトを使用する必要がありますcrosscompilation(CROSS_COMPILE)の将来のオプションのためにcmakeにオプションを渡す

make CROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux- 

と私は似ているが、それを実行するオプションを追加したいです。どうしたらいいですか?

最も簡単な方法については

答えて

7

BuildrootはCMakeツールチェーンファイルを生成します。あなたのBuildrootに応じて、直接outputディレクトリ、またはoutput/host/usr/share/buildrootにあるかもしれません。このファイルの名前はtoolchainfile.cmakeです。次に、あなたのCMakeのアプリケーションを構築するために、実行します。

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/buildroot/output/host/usr/share/buildroot/toolchainfile.cmake

をこのファイルには、クロスコンパイラパスのすべての定義、PKG-config設定の環境変数、ヘッダとライブラリの場所など

+0

それは私にとって新しいもので、とても涼しいものです。 – Cynede

2

、次の操作を行います。CROSS_COMPILE変数を作るために渡され

SET(CMAKE_C_COMPILER $(CROSS_COMPILE)gcc) 
SET(CMAKE_CXX_COMPILER $(CROSS_COMPILE)g++) 

は、それがクロスコンパイラのパスに置き換えられます。

今、適切な方法です。理想的には、CROSS_COMPILE変数は、CMakeがクロスプラットフォームとなるために実行されるときに定義する必要があります。他のCMakeジェネレータを使用すると、最初の解決策を使用することができます。

これはと行うことができます。

IF(UNIX) 
    SET(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc) 
    SET(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++) 

そして、変数定義:この場合

cmake -G "Unix Makefiles" -DCROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux- 

を、CMakeのはCROSS_COMPILEが定義されているか否かに基づき、適切なビルドファイルを生成します。

+0

はありがとう含まれているが、それは私が望むものではありません。 〜/ projects/buildroot/output/host/usr/bin/arm-linux-; g ++:そのようなファイルやディレクトリがありません – Cynede

+0

私はCROSS_COMPILEオプションをmake(makefileに)に渡したいと回答しました – Cynede

+1

答えを編集しました。しかし、最初のオプションは依然としてあなたにリンカエラーを与える可能性があります。 CMakeはあなたがやろうとしているようなジェネレータ固有のものを使うべきではありません。コンパイラ変数をmake経由でCMakeが生成したmakefileに渡すべきではありません。 CMakeを使ってmakefileを生成するときは、クロスコンパイラを定義する必要があります。 2番目のオプションは今すぐ動作するはずです。 – panickal

関連する問題