ターゲットを常に32ビットまたは64ビットの実行可能実行可能ファイルとして、ホストシステムに依存しないcmakeでビルドする方法を提供したいと思います(gccに「-m32」または「-m64」フラグを追加します。まだ他のコンパイラに対して何をすべきか)。
これを行うには3つの方法が考えられますが、どちらを使用すればよいですか?
私の場合、強制32ビットビルドがデフォルトであり、使いやすいはずです。強制64ビットビルドもいくつかの場合に役立ち、それほど難しくないはずです。ホストシステムのビット幅を使用しても、私のケースではほとんど意味がなく、サポートしたくありません。
私は関連する質問をここで見つけました( CMakeを使用して32ビットコンパイルを強制する適切な方法 )が、ほとんどの場合、どのように実行できるかについて説明します。構成可能にするための最良の方法ではありません。
ツールチェーンを使用する
- オプション(-DUSE32bit = true)
これはスケーラブルではないと思います。では、N個のプロジェクトを構築したい場合はどうでしょうか。 N個のオプションを追加する必要があります。
- ビルドタイプ(-DCMAKE_BUILD_TYPE = release32)
これはうまくいくかもしれません。しかし私の意見では、あなたは無関係なものを混ぜているのです。また、いくつかのfind_package
CMake変数を設定して、*_ROOT
の動作を適応させる必要があると確信しています。 CMAKE_BUILD_TYPE
を使用してそれを行うことはできません(少なくとも、スケーラブルな方法で)。
- ツールチェーン(-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)
最高のバリアント。 2つのプロジェクトをビルドする場合-同じツールチェーンを使用するだけです。
cmake -Hproj-1 -B_builds/proj-1 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
cmake -Hproj-2 -B_builds/proj-2 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
64ビットアーキテクチャでサードパーティのExternalProject_Addを構築する場合は、ツールチェーンをCMAKE_ARGSに渡すだけです。
ExternalProject_Add(
...
CMAKE_ARGS ... -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
...
)
find_package
を調整したい-ツールチェーンファイルにCMake変数を追加するだけです。
Visual Studioの場合 https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html
VS 2005以降のVisual Studio Generatorsの場合、これはターゲットアーキテクチャを指定します。
cmake . -DCMAKE_GENERATOR_PLATFORM=x64