代码之家  ›  专栏  ›  技术社区  ›  pmod

使用环境变量识别cygwin、linux、windows

  •  2
  • pmod  · 技术社区  · 15 年前

    当makefile需要在不同的操作系统上运行时,问题就出现了,并且应该根据操作系统正确设置各种设置(转义、路径分隔符等)。 第一种方法是使用Windows Comspec:

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

    这对于cygwin是假阳性的,因为它将windows的环境变量和cygwin检测为windows。 然后我们尝试了Linux密码:

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

    但是,由于集成了非现场工具,我们在Windows(Perl的一个模块)中设置了PWD。所以,检测又失败了。

    我想知道,使用环境变量区分cygwin、linux和windows的最佳方法是什么?

    4 回复  |  直到 6 年前
        1
  •  5
  •   Eliran Malka    8 年前

    Cygwin和(在Ubuntu上测试)Linux提供了 $OSTYPE 环境变量,设置为 cygwin 为CygWin和 linux-gnu 对于(Ubuntu)Linux。

    Windows没有此变量,因此它似乎是您唯一需要的变量。我想有可能 你的 Linux不提供,在这种情况下,您可以使用 奥斯佩佩 区分窗户和Cygwin,然后返回 uname 对于cygwin和linux。

        2
  •  1
  •   pmod    15 年前

    根据pkh的建议,使用shell区分窗口/非窗口对我来说不起作用。似乎shell变量是在gmake运行的makefile中定义的(mine是ver)。3.81),等于“sh.exe”。因此,我目前的工作解决方案是通过.exe Windows可执行文件扩展名来扩展pkh的思想:

    ifneq ($(findstring .exe,$(SHELL)),)
        $(warning In Windows)
    else
        $(warning In Linux/Cygwin)
    endif
    
        3
  •  0
  •   Veger    15 年前

    假设您的所有机器上都有可用的gcc(即您正在使用makefile编译某些东西),那么您可以使用

    gcc -dumpmachine
    

    找出GCC为其构建的操作系统。

    您可以使用输出设置一些变量,例如 WINDOWS , LINUX 或者直接存储以使用信息。

        4
  •  0
  •   mipatriot    6 年前

    在cygwin上,需要导出ostype环境变量,以便make看到它。