我正在使用两种不同的操作系统。
如果我交换命令它不起作用。 是否有任何单行命令集如:
我想要一个适用于它们的命令(或命令),而不会显示任何错误。 我需要此命令的地方是make文件。
我有一个这样的makefile:
all:
open file.pdf
xdg-open file.pdf
other things ..
这里,在makefile中,如何确保make命令在没有运行的情况下运行 Mac和Linux都出错了?
感谢@rubiks,现在代码工作正常。 代码如下所示:
# set pdfviewer for linux and unix machines
####################################################
UNAME_S := $(shell uname -s)
$(info $$UNAME_S == $(UNAME_S))
ifeq ($(UNAME_S),Linux)
PDFVIEWER := xdg-open
else ifeq ($(UNAME_S),Darwin)
PDFVIEWER := open
else
$(error unsupported system: $(UNAME_S))
endif
$(info $$PDFVIEWER == $(PDFVIEWER))
####################################################
# open the pdf file
default: all
$(PDFVIEWER) my_pdf_filename.pdf
答案 0 :(得分:7)
我认为最好更智能地执行此操作并确定您所使用的操作系统:
if [ `uname` == "Darwin" ]; then
open file.pdf
else
xdg-open file.pdf
fi
如果您尝试配置终端以便始终可以使用相同的命令,我建议您将其添加到.bashrc或.bash_profile:
if [ `uname` == "Linux" ]; then
alias open=xdg-open
fi
这样,您始终可以使用命令open
,它可以在任何一个操作系统上运行。
答案 1 :(得分:1)
如果您不介意调用shell,可以在Makefile
内查询系统并相应地设置PDFVIEWER
:
UNAME_S := $(shell uname -s)
$(info $$UNAME_S == $(UNAME_S))
ifeq ($(UNAME_S),Linux)
PDFVIEWER := xdg-open
else ifeq ($(UNAME_S),Darwin)
PDFVIEWER := open
else
$(error unsupported system: $(UNAME_S))
endif
$(info $$PDFVIEWER == $(PDFVIEWER))
答案 2 :(得分:0)
您可以尝试使用which
返回第一个可用的可执行文件,例如
open := $(shell which open xdg-open | head -n1)
xargs := $(shell which gxargs xargs | head -n1) # Another example.
然后将其运行为:
$open file.pdf