Sto provando a scrivere un'applicazione che necessita di intestazioni ALSA o OSS. Fondamentalmente, voglio passare un define al compilatore se /etc/oss.conf non esiste, dal momento che probabilmente l'intestazione soundcard.h non esiste (sentiti libero di correggermi su quello, sono ancora nuovo lavorare con l'OSS). Per la documentazione OSS, si dovrebbe usare la direttiva include in questo modo:Il condizionale del makefile include
include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
Un problema. Il supporto OSS è facoltativo, quindi vorrei verificare se l'intestazione esiste e, in caso affermativo, passare una definizione al compilatore. Il problema è, AFAIK non c'è modo di verificare se un file esiste al di fuori di un makefile regola. All'interno della regola, se uso un'istruzione if, per qualche ragione, cercando di impostare CFLAGS non altera esso:
test: $(objects)
@if [ -f ${OSS_CONFIG} ]; then \
. ${OSS_CONFIG}; \
CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
fi
@echo ${CFLAGS}
(Quanto sopra solo emette il valore originale di CFLAGS, anche se ${OSS_CONFIG}
esiste). Questa è, ovviamente, estremamente brutto, e mi chiedo se c'è un modo più pulito per farlo. O è il modo in cui sto andando per innescare un evento catastrofico in tutto il mondo che coinvolge il genocidio dei gattini?
Oh, e per favore non dirmi di usare autoconf.
Purtroppo, questo genere di cose è il motivo per cui il sistema abominevole noto come "autoconf" ha ottenuto creato in primo luogo. Prima di autoconf, dovresti creare uno script 'config' che è abbastanza facile da fare se sei fluente nel dialetto di sottoinsieme comune di'/bin/sh' che funziona su ogni piattaforma unix in cui il tuo codice potrebbe essere eseguito. Un sacco di persone ancora imprecano a mano costruendo il proprio script di configurazione ... Ho anche sentito che CMAKE è un'altra via d'uscita, ma non ne so abbastanza per basare una risposta su questo. – RBerteig
Posso consigliare vivamente CMake. Roba buona. – JesperE