3

この問題は、makefileを別のOSで実行する必要があり、OSに応じてさまざまな設定(エスケープ、パス区切り文字など)を適切に設定する必要がある場合に発生します。最初のアプローチは、WindowsCOMSPECを使用することでした。

ifneq ($(COMSPEC)$(ComSpec),)
## in windows
else 
## in linux
endif

Cygwinは、Windowsの環境変数を認識し、CygwinをWindowsとして検出するため、これは誤検知です。次に、LinuxPWDを試しました。

ifeq ($(PWD),)
## in windows
else 
## in linux, cygwin
endif

ただし、オフサイトツールの統合の結果として、Windows(perlのモジュールの1つ)にPWDが設定されました。そのため、検出は再び失敗します。

環境変数を使用してCygwin、Linux、Windowsを区別するための最良のアプローチは何でしょうか。

4

4 に答える 4

5

Cygwinおよび(Ubuntuでテスト済み)Linuxは、Cygwinおよび(Ubuntu)Linux用$OSTYPEに設定された環境変数を提供します。cygwinlinux-gnu

Windowsにはこの変数がないため、必要なのはWindowsだけのようです。Linuxがそれを提供していない可能性があると思います。$OSTYPEその場合、WindowsとCygwinを区別してからuname、CygwinとLinuxにフォールバックできます。

于 2010-06-23T18:31:11.663 に答える
1

pkhによって提案されたように、SHELLを使用してWindowsとWindowsではないものを区別することは私にとってはうまくいきません。SHELL変数はgmakeによって実行されているmakefileで定義されているようです(私のバージョンは3.81です)。これは「sh.exe」と同じです。したがって、私にとって現在機能しているソリューションは、.exeWindows実行可能ファイル拡張子で区別することでpkhのアイデアを拡張することです。

ifneq ($(findstring .exe,$(SHELL)),)
    $(warning In Windows)
else
    $(warning In Linux/Cygwin)
endif
于 2010-06-24T06:21:46.167 に答える
0

すべてのマシンでgccを使用できると仮定すると(つまり、makefileを使用して何かをコンパイルしている場合)、次のように使用できます。

gcc -dumpmachine

gccがビルドするOSを見つけるため。

WINDOWS出力を使用して、などの変数を設定LINUXしたり、情報を使用するために直接保存したりできます。

于 2010-06-25T08:11:03.483 に答える
0

Cygwinでは、makeが表示するためにOSTYPE環境変数をエクスポートする必要があります。

于 2018-12-06T01:18:54.303 に答える