簡體   English   中英

使用環境變量識別Cygwin,Linux,Windows

[英]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構建的操作系統。

您可以使用輸出來設置一些變量,例如WINDOWSLINUX或直接存儲它以便使用信息。

在Cygwin上,需要導出OSTYPE環境變量以供make查看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM