21

ALSAまたはOSSヘッダーのいずれかを必要とするアプリケーションを作成しようとしています。基本的に、/ etc / oss.confが存在しない場合は、コンパイラに定義を渡したいと思います。これは、soundcard.hヘッダーが存在しないことを意味している可能性があります(これについては、自由に修正してください。まだ新しいです。 OSSでの作業に)。OSSのドキュメントによると、次のようにincludeディレクティブを使用します。

include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys

1つの問題。OSSのサポートはオプションなので、ヘッダーが存在するかどうかを確認し、存在する場合は、コンパイラーに定義を渡します。問題は、ファイルがmakefileルールの外部に存在するかどうかを確認する方法がないことです。ルール内で、何らかの理由でifステートメントを使用した場合、CFLAGSを設定しようとしても変更されません。

test: $(objects)
    @if [ -f ${OSS_CONFIG} ]; then \
    . ${OSS_CONFIG}; \
    CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
    fi
    @echo ${CFLAGS}

(上記は、CFLAGSの元の値が${OSS_CONFIG}存在する場合でも出力するだけです。)もちろん、これは非常に醜いので、もっとクリーンな方法があるかどうか疑問に思います。それとも、これについて私が行っている方法は、子猫の大量虐殺を含む世界的な大変動のイベントを引き起こすことになるのでしょうか?

ああ、autoconfを使うように言わないでください。

4

2 に答える 2

26

1つの提案:使用-include(その後、警告+失敗時に終了しません)。ただし、この構文が自分で機能するようになったことがあるかどうかはわかりません。

別のハッキングは、次のようなものである可能性がありDUMMY_VAR := $(shell ... )ます。任意のコードを実行する。これがうまくいく可能性はさらに低いと思います。

それ以外は可能ではないと思います。最近同様の問題を調べたところ、makefileの作成プロセス中にmakeに任意のシェルコマンドを実行させることができないことがわかりました。

于 2010-10-11T21:27:27.270 に答える
14

はい、よりクリーンな方法があります。wildcard関数を使用してファイルの存在をテストしてから、ifeq/endifを使用して適切なを設定できますCFLAGS。オーディオ関連のフラグを次のようなものに貼り付けるとAUDIO_CFLAGS、Makefile全体に正しいフラグのセットを自動的に含めることができます。

次のようになります。

OSS_CONF_FILE := $(strip $(wildcard /etc/oss.conf))

ifeq ($OSS_CONF_FILE,)
    AUDIO_CFLAGS = "-I${ALSALIBDIR} -DUSE_ALSA"
else 
    AUDIO_CFLAGS = "-I${OSSLIBDIR} -DUSE_OSS"
endif


sample_build_rule:
    $(CC) $(CFLAGS) $(AUDIO_CFLAGS) ...
于 2010-10-11T21:41:22.263 に答える