2

autotools で非常に具体的な何かを達成しようとしています - 動的変数名。私の目標は、Linux カーネルと同様に、特定の構成ファイルに応じて動的ターゲットを作成することです。

Linux カーネルは、最終的に .config を生成する make menuconfig を使用して構成できます。Linux カーネルの Makefile には などのターゲットが含まれてobj-$(CONFIG_DMA)おり、 の値に応じてCONFIG_DMA (y, n or m)、関連するソース ファイルがモジュールとして静的に組み込まれるか、まったく組み込まれません。私は kconfig-frontends を使用しています。これにより、標準の GNU Makefile に含めることができ、以降は正常に使用できる .config ファイルを生成できます。automake で同じレベルの機能を実現したいと考えていますが、残念ながら automake は外部環境変数に応じて変数名を設定することを拒否しています。この問題を回避するハックな方法を考えることはできますが、明確な方法でこれを達成する方法があるに違いないと確信しています。誰でもこれに対する解決策を考えることができますか?

問題が解決する場合は、cmake を使用することにオープンです。

ありがとう!

4

1 に答える 1

0

おそらくあなたは使用できますEXTRA_foo_SOURCESか?変数代入の LHS では変数置換を使用できない場合がありますが、RHS では確実に使用できます。に考えられるすべてのソースをリストし、 の定義にEXTRA_foo_SOURCES基づいて設定し、実行に使用することを検討します。.configfoo_SOURCES+=

y/m/n に基づいて必要な異なる動作を取得するには、ファイル名拡張子の規則を考案する必要がある場合があります。おそらくfoo_SOURCES = mod.yo、組み込みモジュール (*_SOURCES* 変数の *.o で気を散らさないでください。ルールを提供し、make がそれを理解する必要があります)、foo_SOURCES = mod.moロード可能なモジュール、およびfoo_SOURCES = mod.no無効なモジュールの場合です。次に、ルールを一緒に接着するのを手伝う必要があります。あなたにいくつかのアイデアを与える何か:

-include .config
EXTRA_foo_SOURCES = $(obj-y) $(obj-m)
.c.o: # No rule; disables implicit rule
.c.yo:
    $(COMPILE) -o $@ $<
.c.mo:
    $(COMPILE) -DTHIS_IS_A_MODULE -o $@ $<
.c.no:
    touch $@
.yo.o:
    cp $< $@
.mo.o:
    cp $< $@
.no.o:
    cp /path/to/null/object.o $@

これで何か作っていただけると幸いです。これを完成品としてではなく、automake 原子のスープとして提示します。これを美しい分子に変えていただけることを願っています。

于 2013-01-20T22:30:37.597 に答える