4
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++)

これが私がクロスコンパイルのために今していることです。次のように実行するオプションを追加したいと思います。

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

また、CROSS_COMPILEを(cmakeではなく)makeにパスしない場合は、システムのデフォルトを使用する必要があるため、cmakeはこのオプションをmakefileにパスする必要があります。どうすれば作れますか?

4

2 に答える 2

10

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環境変数、ヘッダー、ライブラリの場所などのすべての定義が含まれています。

于 2012-06-18T13:42:04.257 に答える
1

最も簡単な方法として、次のようにします。

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

CROSS_COMPILE変数がmakeに渡されると、クロスコンパイラパスに置き換えられます。

さて、適切な方法。理想的には、クロスプラットフォームであることが意図されているため、CMakeの実行時にCROSS_COMPILE変数を定義する必要があります。他の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が定義されているかどうかに基づいて、適切なビルドファイルを生成します。

于 2012-05-12T03:46:28.930 に答える