Windows 7-32bitオペレーティングシステムを使用しています。
シンプルなC++ソースコードをすべてのOSとアーキテクチャの実行可能ファイルにコンパイルしたい。
私のOSから以下のオペレーティングシステム用にコンパイルしたいです。
可能ですか?
注: Win7 32ビットのみですべてのOSのC++をコンパイルする必要があります。
クロスコンパイルするよりも、ターゲットOSでコンパイルする方がはるかに簡単です。必要なのは、すべてのOSのツールチェーンと「メイク」ツールです。 CMakeには強力なクロスコンパイル機能があります。必要ではありませんが、ある程度のお金を節約できます。仮想化ソフトウェア(VMWare Playerは無料など)を入手して、異なるOSを実行します。
ツールチェーンとしてclang(OSX)、gcc(Linux)、TDM gcc(Windows)をお勧めします(MSVCもいいですが、無料ではありません)。 32ビットと64ビットの違いは問題になりません。さまざまなコンパイラーを使用している場合は、各コンパイラーの最もペダンティックなフラグをオンにして、標準に準拠することをお勧めします。
また、OSターゲットとアーキテクチャごとに1つのクライアントを持つどこかに継続的統合サーバーを設置することをお勧めします。これにより、1つのOSで行う互換性のない変更の苦痛が緩和されます。また、パッケージマネージャーまたはインストーラーによるインストールを確認することもできます。
クロスコンパイル、ツールチェーン、継続的インテグレーションの詳細については、Webを検索してください。
自動ツールやCMakeのようなビルドシステムが必要です。後者をお勧めします。 Pythonという名前のユーティリティ cookiecutter があり、Python(BoilerplatePP
テンプレート)。そのリンクには、それを使用して開始プロジェクトを作成する方法に関する指示があります。初期プロジェクトは次のようになります。
$ tree cpp/
cpp/
├── CMakeLists.txt
├── README.md
├── include
│ └── Calculator.hpp
├── src
│ ├── CMakeLists.txt
│ └── Calculator.cpp
├── test
│ ├── CMakeLists.txt
│ └── CalculatorTests.cpp
└── thirdparity
└── catch
└── include
└── catch.hpp
CMakeは、バージョン2.6からのクロスコンパイルをサポートしています。 この記事 を読んで、この問題に関する洞察を得てください。幸運を。
CMakeの使用を開始して、すべてのOSでプロジェクトをコンパイラ用に準備できます。
特別な場合には、使用しているOSのプリプロセッサチェックを含むコードを調整する必要があります。例えば:
#ifdef WIN32
//do some stuff for Windows
#Elif __Apple__
//do some stuff for Apple
#Elif __linux__
//do stuff for Linux
#endif
この link で、すべての定義済みマクロのリストを見つけることができます。
Win7 32ビットのみを使用してすべてをクロスコンパイルするには、GCCクロスコンパイラを使用できます。これまでのところ、GCCまたはCLANGはWindows、MacおよびLinuxで利用可能な唯一のコンパイラです。 Windows 32ビットのみではなく、他のターゲット向けにプロジェクトをビルドする場合は、このWikiに従ってください
Golangは 簡単なクロスコンパイル ($ GOOSと$ GOARCHを指定して「ビルドを実行」)を提供します。要件に応じて(ハードRTOSが必要な場合など)、ジョブに適したツールになる場合があります。
短い答えはイエスだと思いますが、詳細はあります(悪魔は常に詳細に隠れています)。簡単に言えば、ソースの互換性とツールチェーンの互換性という2つの質問があります。
ツールチェーンの互換性。ここでは、コンパイラ、ライブラリ、ビルドツールの3つの部分を考慮する必要があります。幸い、ビルドツールは存在しますが、存在しません。それはすべての生まれ変わり、cmake、ninjaなどで有名なメイクです。私はcmakeが最も簡単なものを好むが、あなたはいつでも好きな武器を拾うことができる。コンパイラ。 GCCは良い選択ですが、今日はCLangもあり、これも良い選択です。 CLangは、Windowsでよりクリーンでより適切にサポートされている、より興味深いソリューションであると確信しています。別の良い選択はIntel C++/Cですが、コストがかかります。別の方法は、異なるシステムに異なるコンパイラを使用することであり、これも悪い選択ではありません。ブーストはそれを行い、ブーストチームは最高の1つです。ブースト設定を掘り下げ、多くの興味深いマクロとヘッダーを取得できます。 C++標準ライブラリおよびその他のライブラリ。これは最も難しいことの1つです。 C++はやや標準ですが、更新後に問題が発生する可能性があります。他のライブラリは、特定のシステムに使用するコンパイラでビルドする必要があります。したがって、ライブラリバンドルでソフトウェアを配布する準備をしてください。別の良いオプションは、QtやWxWidgetsのようなサードパーティのクロスプラットフォームライブラリに依存することです。
ソースの互換性は、特定のさまざまなOSサブシステムの実装で緊密に利用可能です。たとえば、スレッド、共有メモリ、ソケット、分散収集I/O、GUI。通常、それほど複雑ではありませんが、すべてのラッパーを作成するには時間がかかります。
cmakeは、ツールチェーンとOSの依存関係をすべて抽象化するため、メタ言語として使用されます。確かに便利ですが、初めて使用するのは難しいかもしれません...
本当に必要なのは、とにかくcmakeが舞台裏で使用するものです:1.各ターゲットOS用のコンパイラー2.よく書かれたメイクファイル
フラグをオンにしてmakefileの動作を変更するか、コードをビルドするときに適切なコンパイラ(目的のOS)を呼び出すだけで本当に必要なバージョンを削除できます。
技術的に言えば、Windowsで同じコードをコンパイルしたい場合は、技術的に言えば、それを指摘するだけです7 butこれらの他のOSをターゲットに、次に必要なのは、Windowsで動作するすべての異なるターゲット用のクロスコンパイラです。そのためには、CygwinまたはMinGW32を使用してクロスをビルドすることGCCソースからのさまざまなアーキテクチャ用のコンパイラGCC(および場合によってはclang)は、a)無料で、b)すべてのターゲットをサポートできる唯一のコンパイラです。クロスコンパイラの構築は簡単ではありませんが、実行可能でなければなりません。いくつかの参照:
「CMakeを使用してください!」という答えすべてのシステム上でソースのビルドをネイティブにサポートできるビルドシステムを使用することを奨励しているという点で、良いアドバイスを与えていますが、実際にはbuild Windows 7では、CMakeを使用しても効果はありません。
Windows 10
を使用すると、 CLion
IDEおよび WSL
を使用すると、これは実際に簡単です。Linuxを使用してWSL
インストールを使用してコードをコンパイルできます。 GCC
ホストでの作業中のコンパイラツールチェーン(通常はWindows
)。その後、もちろんWindows
のようなMinGW
ツールチェーンに切り替えるか、MSVC
でVisual Studio
を使用して再度コンパイルしてWindows
バイナリを取得することもできます。
一日の終わりに、これは両方のバイナリを提供しますが、Windows
のみを常に使用しているように感じます。 WSL
は、近年Microsoft
が行った最高のことの1つであると言う人もいます。確かに、クロスプラットフォームのC/C++
開発には素晴らしいです。
OS X
のコンパイルはこれに含まれていないため、残念ながらMac
またはOS X
を実行している仮想マシンが必要です。