我正在尝试编写一个需要ALSA或OSS标头的应用程序.基本上,如果/etc/oss.conf不存在,我想将一个定义传递给编译器,因为这可能意味着soundcard.h头不存在(随意在那个上纠正我,我还是新的与OSS合作).根据OSS文档,您将使用include指令,如下所示:
include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
Run Code Online (Sandbox Code Playgroud)
一个问题.OSS支持是可选的,所以我想检查标头是否存在,如果存在,则将定义传递给编译器.问题是,AFAIK无法检查文件是否存在于makefile 规则之外.在规则内部,如果我使用if语句,由于某种原因,尝试设置CFLAGS不会改变它:
test: $(objects)
@if [ -f ${OSS_CONFIG} ]; then \
. ${OSS_CONFIG}; \
CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
fi
@echo ${CFLAGS}
Run Code Online (Sandbox Code Playgroud)
(上面只输出CFLAGS的原始值,即使${OSS_CONFIG}存在.)这当然是非常难看的,我想知道是否有更清洁的方法来做到这一点.或者我正在采取的方式引发一场涉及小猫种族灭绝的全球性灾难性事件?
哦,请不要告诉我使用autoconf.