クロスコンパイルとCMake

クロスコンパイルとCMake

クロスコンパイルをしようとしています。CGALamd64 Linux システムから ARM アーキテクチャに移行します。 CGAL目的CMake建設に使用されます。

CGALには、以下を含むいくつかの依存関係があります。良い製造慣行そしてMPFR図書館。 CMakeが実行されたら、これらの依存関係のバージョンを確認する必要があります。バージョンを見つけるために、CMakeはこれらのライブラリに簡単にリンクし、そのバージョンを出力するいくつかの小さなテストプログラムをコンパイルして実行します。これは、クロスコンパイルされていない一般的なビルドプロセス中に正しく機能します。

ただし、クロスコンパイルすると、これらのテストプログラムは自然にホストシステムで実行されません。例は次のとおりです。

/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1
/opt/Company/ArmTools_GCC435_GLIBC_Q3_2011/bin/arm-rc-linux-gnueabi-g++        -fPIC CMakeFiles/cmTryCompileExec.dir/print_GMP_version.cpp.o  -o cmTryCompileExec -rdynamic /home/pmw/Software-Engineering/build/Lib/mpir-2.6.0/arm/lib/libgmp.a
gmake[1]: Leaving directory `/home/pmw/Software-Engineering/SW_Tools/CGAL-4.1/CMakeFiles/CMakeTmp'
/home/pmw/Software-Engineering/SW_Tools/CGAL-4.1/CMakeFiles/CMakeTmp/cmTryCompileExec: /home/pmw/Software-Engineering/SW_Tools/CGAL-4.1/CMakeFiles/CMakeTmp/cmTryCompileExec: cannot execute binary file

-- USING GMP_VERSION = 'unknown'

私が見つけた提案(私が正しく理解した場合)GMPバージョンを明示的に指定すると、CMakeがそれを確認しようとし、失敗するのを防ぎます。だから、次の行を含むファイルを作成しました。

SET(GMP_VERSION 2.6.0)

パラメータを使用してCMakeを呼び出します-C path/to/my/file。しかし、それは何も変えません。その後、パラメータを使用してCMakeを呼び出そうとします-DCMAKE_TOOLCHAIN_FILE=/path/to/my/file。繰り返しますが、効果はありません。しかし、CMakeがファイルを見つけて解析できることがわかりました。

それでは、CMakeがホストシステム上でクロスコンパイルされたプログラムを構築して実行しないようにどのように説得できますか?

このUnixおよびLinux StackExchangeサイトがこの質問を解決するのに最適な場所ではない場合は、事前にお詫び申し上げます。先週CGALメーリングリストに私の質問を投稿しました。(今、「cross-compile cgal」のGoogle検索結果のトップ3位に入っています。私は有名になりました!)しかし、何の答えも受けませんでした。

ベストアンサー1

見るCMake WikiCMAKE_CROSSCOMPILING、変数とCMakeのキャッシュ(すべてWikiで説明されている)を少し変更する必要があると思います。

おすすめ記事