[英]Identify Cygwin, Linux, Windows using environment variables
當需要在不同的OS上運行makefile並根據OS正確設置各種設置(轉義,路徑分隔符等)時,就會出現問題。 第一種方法是使用Windows COMSPEC:
ifneq ($(COMSPEC)$(ComSpec),)
## in windows
else
## in linux
endif
對於Cygwin,這是誤報,因為它可以看到Windows的環境變量並將Cygwin檢測為Windows。 然后我們嘗試了Linux PWD:
ifeq ($(PWD),)
## in windows
else
## in linux, cygwin
endif
但是,由於集成了非現場工具,因此我們在Windows(perl的模塊之一)中設置了PWD。 因此,檢測再次失敗。
我想知道,使用環境變量區分Cygwin,Linux和Windows的最佳方法是什么?
Cygwin和(在Ubuntu上進行了測試)Linux提供了$OSTYPE
環境變量,對於Cygwin設置為cygwin
,對於(Ubuntu)Linux設置為linux-gnu
。
Windows沒有此變量,因此它似乎是您唯一需要的變量。 我想這可能是你的 Linux沒有提供它,在這種情況下,你可以使用$OSTYPE
Windows和Cygwin的區分,然后回落到uname
的Cygwin的與Linux操作系統。
如pkh所建議的那樣,在Windows /非Windows之間使用SHELL進行區分對我不起作用。 似乎SHELL變量是在gmake運行的makefile中定義的(mine是版本3.81),它等於“ sh.exe”。 因此,對我來說,當前可行的解決方案是通過.exe Windows可執行文件擴展名來區分擴展pkh的想法:
ifneq ($(findstring .exe,$(SHELL)),)
$(warning In Windows)
else
$(warning In Linux/Cygwin)
endif
假設您的所有機器上都有可用的gcc(即您正在使用makefile進行編譯),則可以使用
gcc -dumpmachine
找出gcc構建的操作系統。
您可以使用輸出來設置一些變量,例如WINDOWS
, LINUX
或直接存儲它以便使用信息。
在Cygwin上,需要導出OSTYPE環境變量以供make查看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.