Próbuję napisać aplikację, która potrzebuje nagłówków ALSA lub OSS. Zasadniczo chcę przekazać definicję do kompilatora, jeśli plik /etc/oss.conf nie istnieje, ponieważ prawdopodobnie oznacza to, że nagłówek soundcard.h nie istnieje (nie krępuj się poprawić mnie na tym, wciąż jestem nowy do pracy z OSS). Zgodnie z dokumentacją OSS użyjesz dyrektywy include tak:Warunek Makefile:
include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
Jeden problem. Obsługa OSS jest opcjonalna, więc chciałbym sprawdzić, czy nagłówek istnieje, a jeśli tak, przekazać definicję do kompilatora. Problem polega na tym, że AFAIK nie ma możliwości sprawdzenia, czy plik istnieje poza plikiem Makefile Reguła. Wewnątrz reguły, jeśli używam if, z jakiegoś powodu, starając się ustawić CFLAGS nie zmienia go:
test: $(objects)
@if [ -f ${OSS_CONFIG} ]; then \
. ${OSS_CONFIG}; \
CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
fi
@echo ${CFLAGS}
(Powyższy prostu wyprowadza oryginalny wartość flagami, nawet jeśli ${OSS_CONFIG}
istnieje). To jest oczywiście wyjątkowo brzydka i zastanawiam się, czy jest na to czystszy sposób. A może tak zamierzam wywołać ogólnoświatowe kataklizmystyczne wydarzenie z udziałem ludobójstwa kociąt?
Aha, i proszę nie mów mi, żebym używał autoconf.
Niestety, tego typu rzeczy to dlaczego system znany jako „wstrętny” został stworzony autoconf w pierwszej kolejności. Przed autoconfem możesz ręcznie napisać skrypt 'config', który jest dość łatwy do zrobienia, jeśli płynnie posługujesz się dialektem common-podzbioru'/bin/sh', który działa na każdej uniksowej platformie, na której może działać Twój kod. Wiele osób wciąż przysięga na ręczne tworzenie własnego skryptu konfiguracyjnego ... Słyszałem też, że CMAKE to kolejna droga wyjścia, ale nie wiem wystarczająco dużo, aby znaleźć na to odpowiedź. – RBerteig
Mogę zdecydowanie polecić CMake. Dobry towar. – JesperE