R语言 正在Makefile中检查GNU扩展...警告

ruarlubt  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(142)

我在Makevar文件中添加了以下内容:

# Set the library flags based on the operating system
ifeq ($(findstring linux,$(OSTYPE)), linux)
    PKG_LIBS = -L$(LIBDIR) -lharmonium -lasound
else
    PKG_LIBS = -L$(LIBDIR) -lharmonium
endif

devtools::check抱怨道:

❯ checking for GNU extensions in Makefiles ... WARNING
  Found the following file(s) containing GNU extensions:
    src/Makevars
  Portable Makefiles do not use GNU extensions such as +=, :=, $(shell),
  $(wildcard), ifeq ... endif, .NOTPARALLEL See section ‘Writing portable
  packages’ in the ‘Writing R Extensions’ manual.

如何在保持Makevar依赖$OSTYPE的同时避免此警告?
编辑:这是我根据Dirk的建议得到的解决方案。

PKG_LIBS = `os=\`uname -s\`; if [ "$$os" = "Linux" ]; then echo "-L${LIBDIR} -lharmonium -lasound"; else echo ="-L${LIBDIR} -lharmonium"; fi`
tzdcorbm

tzdcorbm1#

您可以直接调用grep,并使用shell变量保存最后一个命令的值来访问is。但是,更常见的方法是查询uname -s并进行比较。我在这里使用这两种方法。

代码
#!/bin/sh

echo $OSTYPE | grep -q linux
if [ $? -eq 0 ]; then
    echo "We are on Linux (1 of 2)"
    echo "PKG_LIBS = -L${LIBDIR} -lharmonium -lasound"
fi

os=`uname -s`
if [ "$os" = "Linux" ]; then
    echo "We are on Linux (2 of 2)"
    echo "PKG_LIBS = -L${LIBDIR} -lharmonium -lasound"
fi
输出

虽然我在bash下看到了OSTYPE,但在sh中它是空的,因此只有第二种方法可行。

$ ./answer.sh 
We are on Linux (2 of 2)
PKG_LIBS = -L -lharmonium -lasound
$

在真实的使用中,您当然希望赋值给PKG_LIBS,而不是回显它。

相关问题