web-dev-qa-db-ja.com

cmake:スクリプトから環境変数を設定します

クロスコンパイルに必要なすべての変数を設定するスクリプトがあります。以下はその一部です。

export CONFIG_SITE=~/workspace/eldk-5.4/powerpc/site-config-powerpc-linux
export CC="powerpc-linux-gcc  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CXX="powerpc-linux-g++  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CPP="powerpc-linux-gcc -E  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export AS="powerpc-linux-as "
export LD="powerpc-linux-ld  --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export GDB=powerpc-linux-gdb

私が行った場合 source environment-setup-powerpc-linux、すべての環境変数が現在のシェルセッションにインポートされ、サンプルをコンパイルできます。

これらの変数をcmakeにインポートすることはできますか?はいの場合、どのように?


もう少し詳細:

  1. ELDK v 5.4 を使用しています。インストールスクリプトは、すべての環境変数を設定するスクリプトを生成します
  2. このチュートリアル を見つけました。これは、クロスコンパイルを手動で設定する方法を説明していますが、すべてを設定するスクリプトの使用方法は説明していません
  3. cmakeを設定する前にスクリプトを呼び出すと、すべて正常に動作し、クロスコンパイルできますが、cmakeがスクリプトを呼び出すようにしたいです
34
BЈовић

cmakeクイックスタート を読んで、コマンドラインで変数を指定できます。

cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...

それ以外の場合、cmakeスクリプトのsetコマンドがおそらく必要です。 リファレンスマニュアル を参照してください。 環境変数PATHを設定するには、次のようにします。

set(ENV{PATH} "/home/martink")

通常の変数を設定するには、次のようにします。

set(variable "value")

設定する必要があるのは不明です。おそらく環境の設定です。

とはいえ、cmakeを呼び出す前に環境変数を設定することは、多くの場合、この場合のように問題を解決する最も簡単な解決策です: https://stackoverflow.com/a/15053460/684229

69
TMS

CMakeで確実にクロスコンパイルを行うためのコンパイラとフラグを設定する唯一の方法は、見つけたチュートリアルで行われたように、ツールチェーンファイルを使用することです。

同じ問題(スクリプトを生成するツールキットがコンパイル環境を設定する)に直面したとき、スクリプトと共にツールチェーンファイルを生成するようにツールキットを変更しました。

実際には、cmake-toolchain-fileはそれほど頻繁に変更されません。ターゲットに使用される基本的なフラグは、プロジェクトのかなり早い段階で修正されます-通常は。 CMakeのCMAKE_BUILD_TYPEツールチェーンファイルを変更せずに、デバッグコンパイルとリリースコンパイルを切り替えることができます。

サポートするターゲットが異なる場合は、異なるツールチェーンを作成し、CMakeでout-of-source-buildを使用します。

[〜#〜] edit [〜#〜]:できることの1つは、-D-argumentを使用してcmakeを呼び出し、目的の変数を設定し、以前にスクリプトをソースしたことです。

source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc

結果は、ツールチェーンファイルを使用した場合と同じになります。

4
Patrick B.