linux运行windows环境变量,使用环境变量识别Cygwin,Linux,Windows
當(dāng)需要在不同的OS上運(yùn)行makefile并根據(jù)OS正確設(shè)置各種設(shè)置(轉(zhuǎn)義,路徑分隔符等)時(shí),就會(huì)出現(xiàn)問(wèn)題。
第一種方法是使用Windows COMSPEC:
ifneq ($(COMSPEC)$(ComSpec),)
## in windows
else
## in linux
endif
對(duì)于Cygwin,這是誤報(bào),因?yàn)樗梢钥吹絎indows的環(huán)境變量并將Cygwin檢測(cè)為Windows。
然后我們嘗試了Linux PWD:
ifeq ($(PWD),)
## in windows
else
## in linux, cygwin
endif
但是,由于集成了非現(xiàn)場(chǎng)工具,因此我們?cè)赪indows(perl的模塊之一)中設(shè)置了PWD。 因此,檢測(cè)再次失敗。
我想知道,使用環(huán)境變量區(qū)分Cygwin,Linux和Windows的最佳方法是什么?
可能重復(fù)的stackoverflow.com/questions/714100/os-detecting-makefile
謝謝,這也有可能對(duì)我有幫助。 實(shí)際上,這不是重復(fù)的,因?yàn)樵搯?wèn)題不包括Windows。
Cygwin和(在Ubuntu上進(jìn)行了測(cè)試)Linux提供了$OSTYPE環(huán)境變量,對(duì)于Cygwin設(shè)置為cygwin,對(duì)于(Ubuntu)Linux設(shè)置為linux-gnu。
Windows沒(méi)有此變量,因此它似乎是您唯一需要的變量。我想您的Linux可能沒(méi)有提供它,在這種情況下,您可以使用$OSTYPE區(qū)分Windows和Cygwin,然后針對(duì)Cygwin與Linux退回到uname。
+1,因?yàn)槟慕鉀Q方案是目前最好的解決方案
更新后的內(nèi)容似乎完全可以滿(mǎn)足您的需求。
根據(jù)問(wèn)題,此解決方案似乎是最合適的-接受它。 PS似乎是Windows,可以通過(guò)$ OS環(huán)境變量的存在來(lái)區(qū)分。
" Windows沒(méi)有此變量"-并不是完全準(zhǔn)確:git-bash還提供了自己的填充$OSTYPE(值為msys),因此如果您依賴(lài)于它,您可能會(huì)錯(cuò)誤地將窗口檢測(cè)為非窗口沒(méi)有檢測(cè)到。
如pkh所建議的那樣,在Windows /非Windows之間使用SHELL進(jìn)行區(qū)分對(duì)我不起作用。似乎SHELL變量是在gmake運(yùn)行的makefile中定義的(mine是版本3.81),它等于" sh.exe"。因此,對(duì)我來(lái)說(shuō),當(dāng)前可行的解決方案是通過(guò).exe Windows可執(zhí)行文件擴(kuò)展名來(lái)區(qū)分?jǐn)U展pkh的想法:
ifneq ($(findstring .exe,$(SHELL)),)
$(warning In Windows)
else
$(warning In Linux/Cygwin)
endif
在Cygwin上,需要導(dǎo)出OSTYPE環(huán)境變量以供make查看。
假設(shè)您的所有機(jī)器上都有可用的gcc(即您正在使用makefile進(jìn)行編譯),則可以使用
gcc -dumpmachine
找出gcc構(gòu)建的操作系統(tǒng)。
您可以使用輸出設(shè)置一些變量,例如WINDOWS,LINUX或直接存儲(chǔ)它以使用信息。
我使用了另一個(gè)編譯器(提示性編譯器),檢查了它的幫助,沒(méi)有找到任何類(lèi)似的選項(xiàng)。實(shí)際上,問(wèn)題是關(guān)于使用環(huán)境變量和進(jìn)行操作。無(wú)論如何,謝謝,如果我們切換到gcc可能會(huì)有所幫助。
我剛剛想到,即使我們不將gcc用作編譯器,也只能出于這個(gè)原因使用它-"識(shí)別OS"。使用編譯器檢測(cè)OS似乎很奇怪。對(duì)于Windows,在我的網(wǎng)站上顯示" mingw32",對(duì)于Cygwin顯示" i686-pc-cygwin"。因此,我想知道這個(gè)輸出可能有多大變化,并且通過(guò)此輸出來(lái)區(qū)分是否會(huì)有問(wèn)題?
好吧,您可以為gcc -dumpmachine命令的已知結(jié)果設(shè)置(取消)諸如WINDOWS或LINUX的變量,即mingw32和i686-pc-cygwin將設(shè)置WINDOWS變量,而諸如x86_64-linux-gnu的變量將LINUX變量。當(dāng)然,您可以尋找子字符串來(lái)簡(jiǎn)化此過(guò)程。之后,您可以在其余makefile中使用這些變量。
總結(jié)
以上是生活随笔為你收集整理的linux运行windows环境变量,使用环境变量识别Cygwin,Linux,Windows的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: docker php伪静态无效,dock
- 下一篇: linux删除旧网卡,如何删除旧网卡驱动