我在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`
1条答案
按热度按时间tzdcorbm1#
您可以直接调用
grep
,并使用shell变量保存最后一个命令的值来访问is。但是,更常见的方法是查询uname -s
并进行比较。我在这里使用这两种方法。代码
输出
虽然我在bash下看到了
OSTYPE
,但在sh中它是空的,因此只有第二种方法可行。在真实的使用中,您当然希望赋值给
PKG_LIBS
,而不是回显它。