web-dev-qa-db-ja.com

cmakeで32ビットまたは64ビットのビルドを強制するオプション

ターゲットを常に32ビットまたは64ビットの実行可能実行可能ファイルとして、ホストシステムに依存しないcmakeでビルドする方法を提供したいと思います(gccに「-m32」または「-m64」フラグを追加します。まだ他のコンパイラに対して何をすべきか)。

これを行うには3つの方法が考えられますが、どちらを使用すればよいですか?

  1. オプション(-DUSE32bit = true)
  2. ツールチェーン(-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)
  3. ビルドタイプ(-DCMAKE_BUILD_TYPE = release32)

私の場合、強制32ビットビルドがデフォルトであり、使いやすいはずです。強制64ビットビルドもいくつかの場合に役立ち、それほど難しくないはずです。ホストシステムのビット幅を使用しても、私のケースではほとんど意味がなく、サポートしたくありません。

私は関連する質問をここで見つけました( CMakeを使用して32ビットコンパイルを強制する適切な方法 )が、ほとんどの場合、どのように実行できるかについて説明します。構成可能にするための最良の方法ではありません。

18
Flogo

TL; DR

ツールチェーンを使用する

深く

  1. オプション(-DUSE32bit = true)

これはスケーラブルではないと思います。では、N個のプロジェクトを構築したい場合はどうでしょうか。 N個のオプションを追加する必要があります。

  1. ビルドタイプ(-DCMAKE_BUILD_TYPE = release32)

これはうまくいくかもしれません。しかし私の意見では、あなたは無関係なものを混ぜているのです。また、いくつかのfind_package CMake変数を設定して、*_ROOTの動作を適応させる必要があると確信しています。 CMAKE_BUILD_TYPEを使用してそれを行うことはできません(少なくとも、スケーラブルな方法で)。

  1. ツールチェーン(-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変数を追加するだけです。

7
user2288008

Visual Studioの場合 https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html

VS 2005以降のVisual Studio Generatorsの場合、これはターゲットアーキテクチャを指定します。

cmake . -DCMAKE_GENERATOR_PLATFORM=x64
18
tresf