如何保留Makevars对$OSTYPE的依赖并规避GNU扩展警告?
问题:Makevars依赖OSTYPE时如何避免GNU扩展警告
我在Makevars文件中添加了这段代码,用于根据操作系统设置库链接参数:
# 根据操作系统设置库链接标志 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
可移植Makefile不应使用GNU扩展特性,例如 +=, :=, $(shell),
$(wildcard), ifeq ... endif, .NOTPARALLEL 请查看《Writing R Extensions》手册中的「Writing portable packages」章节。
请问如何在保留Makevars对$OSTYPE的逻辑依赖前提下,消除这个警告?
解决方案
编辑:遵循Dirk的建议,可改用shell命令替换的方式实现相同逻辑,避免使用GNU make的扩展语法:
PKG_LIBS = `os=\`uname -s\`; if [ "$$os" = "Linux" ]; then echo "-L${LIBDIR} -lharmonium -lasound"; else echo "-L${LIBDIR} -lharmonium"; fi`
(注:原代码中echo =\"...\"的等号属于笔误,已修正为正确的echo \"...\"形式,确保输出的链接参数格式正确)
内容的提问来源于stack exchange,提问作者daniellga
相关产品推荐
相关产品推荐

