Я пытаюсь написать приложение, которое нуждается в заголовках ALSA или OSS. По сути, я хочу передать определение компилятору, если /etc/oss.conf не существует, так как это, вероятно, означает, что заголовок soundcard.h не существует (не стесняйтесь исправлять меня, я все еще новичок на работу с OSS). Согласно документации OSS, вы должны использовать директиву include следующим образом:
include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
Одна проблема. Поддержка OSS является необязательной, поэтому я хотел бы проверить, существует ли заголовок, и если да, передать определение компилятору. Проблема в том, что в AFAIK нет способа проверить, существует ли файл вне make-файла rule . Внутри правила, если по какой-то причине я использую оператор if, попытка установить CFLAGS не изменит его:
test: $(objects)
@if [ -f ${OSS_CONFIG} ]; then \
. ${OSS_CONFIG}; \
CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
fi
@echo ${CFLAGS}
(Вышеприведенное просто выводит исходное значение CFLAGS, даже если существует ${OSS_CONFIG}
.) Это, конечно, крайне уродливо, и мне интересно, есть ли более чистый способ сделать это. Или то, как я это сделаю, приведет к всемирному катаклизму, связанному с геноцидом котят?
О, и, пожалуйста, не говорите мне использовать autoconf.