10

Windows 32 ビット (MSVC++ を使用) で C++ でソフトウェアを開発していますが、すべてのプラットフォームでソフトウェアを使用できるようにしたいので、ビルド ジェネレーターとして CMake を使用することにしました。

したがって、私はまだ CMake の初心者です。CMake チュートリアルから、コードをクロス コンパイルするには、まずターゲット プラットフォームをシミュレートするツールチェーンをホスト プラットフォームにインストールする必要があることを理解しています。次に、このツールチェーンによって提供される適切なターゲット プラットフォームの C および C++ コンパイラを使用して、CMake は makefile などを生成できます。

今、Win32 プラットフォームで Linux プラットフォーム (GNU/Linux) 用のコードをビルドしたいと考えています。Cygwin と組み合わせた CMake を使用し、gcc と g++ をコンパイラとして使用して、上記の手順を実行してみました。正常にビルドされ、makefile が作成され、Cygwin ターミナルで「make」を実行すると、生成された makefile が「作成」されました。これで、Linux プラットフォームで実行することを望んでいた実行可能ファイルができました。しかし、Linux では次のエラーが表示されます。bash はバイナリ ファイルを実行できません。

コマンドファイル executablename を使用して、上記の手順で作成された実行可能ファイルは、Windows 専用の PE32 タイプであることがわかりました。

ここで私の質問は次のとおりです。cmake を使用したクロスプラットフォーム ビルド手順の理解は正しいですか?それとも、Windows で別の Linux ツールチェーンを使用して Linux ELF 実行可能ファイルを取得する必要がありますか? 私が欲しいものを提供してくれるツールチェーンは何ですか?

どうもありがとう

セタレ

4

2 に答える 2

8

クロス コンパイルを行う場合は、ここを参照してください: cmake-toolchains(7) 。ただし、仮想ボックスのような Linux VM を Windows マシンにインストールし、Linux 上で単純にビルドすることをお勧めします。コンパイルがはるかに高速になり、クロスコンパイルについて心配する必要がなくなります。同じソース ツリーを共有できるように、Linux VM から Windows ディスクをマウントできます。Linux VM は、Windows で実行されている gcc よりもはるかに高速にコンパイルされます。

于 2013-06-16T12:32:27.343 に答える
1

CMake についてのあなたの理解は正しいです...ファイルのルールに基づいて、要求する (または現在使用しているプラ​​ットフォームのデフォルトである) ビルド システムを作成する方法を決定しCMakeLists.txtます。ただし、Linux をターゲットにできるものがインストールされていない場合、これは必ずしも Windows マシンで Linux 用にコンパイルするのに役立つとは限りません。

Linux を対象としてコンパイルするには、Linux コンパイラを使用する必要があります。@stjin が投稿したリンクは、cygwin にインストールする方法を示しています。次に、CMake ビルドをセットアップするには、ターミナルで次の操作を行います。

CC=gcc-linux CXX=g++-linux cmake . [options]

これにより、CMake は特別な Linux ターゲット コンパイラを見つけるように指示されます。うまくいけば、これらのコンパイラでコンパイルした後、Linux で実行できるようになります。

于 2013-06-10T23:16:41.360 に答える