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