我正在尝试编写一个需要alsa或oss头的应用程序。基本上,我想给编译器提供一个定义,如果/ETC/OSS.CONF不存在,因为这可能意味着声卡。H头不存在(在这个问题上可以自由地纠正我,我仍然是OSS新手)。根据OSS文档,您可以使用include指令,如下所示:
include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
一个问题。OSS支持是可选的,所以我想检查头是否存在,如果有的话,将一个定义传递给编译器。问题是,没有办法检查文件是否存在于MaFafile规则之外。在规则内部,如果我使用if语句,出于某种原因,尝试设置cflags不会改变它:
test: $(objects)
@if [ -f ${OSS_CONFIG} ]; then \
. ${OSS_CONFIG}; \
CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
fi
@echo ${CFLAGS}
(上文只输出CFLAGS的原始值,即使
${OSS_CONFIG}
存在)。当然,这是非常丑陋的,我想知道是否有更清洁的方法来做。还是说我的做法会引发一场全球性的灾难性事件,涉及到对小猫的种族灭绝?哦,请不要告诉我使用autoconf。
最佳答案
一个建议是:使用-include
(这样它就不会在失败时发出警告+退出)。不过,我不知道我自己是否真的有这种语法。
另一个黑客可能是:执行任意代码。我认为这更不可能奏效。
除此之外,我认为这是不可能的。当我最近研究一个类似的问题时,我发现在makefile创建过程中无法让make运行任意的shell命令。
关于c - Makefile条件包括,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3910054/