Estoy tratando de escribir una aplicación que necesita encabezados ALSA o OSS. Básicamente, quiero pasar una definición al compilador si /etc/oss.conf no existe, ya que eso probablemente signifique que el encabezado soundcard.h no existe (no dude en corregirme en ese, sigo siendo nuevo para trabajar con OSS). De acuerdo con la documentación de OSS, usted usaría la directiva include de la siguiente manera:Makefile conditional include
include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
Un problema. El soporte de OSS es opcional, por lo que me gustaría verificar si el encabezado existe, y si lo hace, pasarle una definición al compilador. El problema es que, AFAIK, no hay manera de comprobar si existe un archivo fuera de un archivo make regla. Dentro de la norma, si uso una declaración si, por alguna razón, tratando de establecer CFLAGS no altera que:
test: $(objects)
@if [ -f ${OSS_CONFIG} ]; then \
. ${OSS_CONFIG}; \
CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
fi
@echo ${CFLAGS}
(Lo anterior simplemente devuelve el valor original de CFLAGS, incluso si existe ${OSS_CONFIG}
.) Este es, por supuesto, extremadamente feo, y me pregunto si hay una forma más limpia de hacerlo. ¿O es que la forma en que voy sobre esto va a desencadenar un evento cataclísmico mundial que involucre el genocidio de los gatitos?
Ah, y por favor no me diga que use autoconf.
Por desgracia, este tipo de cosas es por eso que el abominable sistema conocido como "autoconf" consiguió creado en el primer lugar. Antes de autoconf, crearías manualmente un script 'config' que es bastante fácil de hacer si dominas el dialecto de subconjuntos comunes de'/bin/sh' que funciona en cualquier plataforma unix donde se ejecute tu código. Muchas personas todavía juran por la mano crear tu propio script de configuración ... También he escuchado que CMAKE es otra salida, pero no sé lo suficiente como para basar una respuesta en eso. – RBerteig
Puedo recomendar encarecidamente CMake. Buen material. – JesperE