あなたは設定段階で環境変数を設定しますが、add_custom_target
のために指定されたコマンドはビルドステップで実行されます。 CMakeのよくある質問も参照してください:CMakeLists.txt にHow can I get or set environment variables?
[...]
環境変数SET
にのみ cmakeの自体(のconfigure-時間)のために有効になり、 ので、あなたはこれを使用することはできませんメソッドを使用して、カスタムコマンドに必要な環境変数 を設定します(ビルド時間)。 様々なCMakeコマンド (例えば、add_custom_command()
、現時点ではまだサポートされていません)で環境変数をサポートしない場合、 の代わりにシェルスクリプトを呼び出す可能性があります。
現在
add_custom_target
(ビルドステップのためのアクションを定義し、他のコマンドは、例えばadd_custom_command
)簡単な設定の環境変数をサポートしていません。 this bugreportでアドバイスされているように、設定変数の値にスペースがない場合は、Linux上でをコマンドに追加する前に、 "VAR = VAL"節を付けることができます。 Windowsでは
:
wrapper.bat:
@ECHO OFF
set PATH="C:\\Some\\Path;%PATH%"
%*
CMakeLists.txt:
一般的なケースでは、あなたは
ラッパー環境をセットアップし、実際のコマンドを実行するスクリプトを、準備することができます
add_custom_target(...
COMMAND cmd /c ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.bat <real_command> args...
)
O n個のLinux:
wrapper.sh:
export "PATH=/Some/Path:$PATH"
eval "$*"
CMakeLists.txt:
add_custom_target(...
COMMAND /bin/sh ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh <real_command> args...
)
変数の値は、構成に依存している場合、あなたはconfigure_file
でラッパースクリプトを設定することができます。
UPDATE:
@sakraによって示されるように、cmake
実行のenv
ツールモードがラッパー・スクリプトとして使用することができる。
add_custom_target(...
COMMAND ${CMAKE_COMMAND} -E env "PATH=C:/Some/Path;$ENV{PATH}" <real_command> args...
)
このようにCMakeの3.2から利用可能です。
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Run command in a modified environment.
例えば:
add_custom_target(newtarget ${CMAKE_COMMAND} -E env NAME=VALUE somecommand)
またCommand Line Tool Modeを参照してください。コマンドラインツールモードコマンドenv
私はあなたのコメントから新しいプロセスを作成するので、新しいプロセスはメインプロセスの環境を継承せずに独自の環境を提供することをお勧めします。メインプロセスの子プロセスを作成する場合は、環境を継承する必要がありますが、 'cmake'は何も分かりませんので、私はここから離れているかもしれません。しかし、ディレクトリ区切り文字として 'backslash'を使うべきです。'/'ではなく、'/'はスイッチプレフィックスです。ときどき '/'はうまく動作しますが、信頼できません。 – Magoo