我正在尝试编写一个需要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/

10-11 21:12