9

リンカー スクリプトが makefile/shell 変数にアクセスし、その変数に基づいて決定を下すことは可能ですか?

たとえば、別のリンカ スクリプトを使用せずに下の RAM 領域の開始を変更したい場合、make 変数を使用してこれを行うことは可能でしょうか?

MEMORY
{
ifeq ($(SOME_VAR),0)
RAM (wx) : ORIGIN = 0x100000, LENGTH = 128K
else
RAM (wx) : ORIGIN = 0x200000, LENGTH = 128K
endif
}
4

3 に答える 3

0

いくつかのリンカ スクリプトのどれを makefile 内で決定するかを決定するソリューションが十分でない場合、make 内でスクリプトを生成することが実行可能なオプションになる可能性があります。

このソリューションは、環境変数にエクスポートされ、$$ で参照される GNU make の verbatim 変数に依存しています。次のように、リンカー スクリプトを別のリンカー スクリプトに含めるために使用するパス変数を定義するために、これを使用しています。

define LDSCRIPT_DEF
/* Include the original libopencm3 linker script */
INCLUDE $(OPENCM3_DIR)/lib/stm32/f4/stm32f405x6.ld

/* Do custom stuff */
endef
export LDSCRIPT_DEF

$(LDSCRIPT):
    @echo "$$LDSCRIPT_DEF" > $(LDSCRIPT)

説明: これはメイクファイルの一部であり、メイクファイルが関連するすべてのルールで前提条件として $(LDSCRIPT) を使用する場合にのみ機能します。

于 2014-08-22T09:15:52.857 に答える
0

使用しているリンカーによって異なりますが、私はそれを疑っています。リンカーが make からエクスポートされた変数を読み取ることは可能かもしれませんが、前述したように、これはすべて特定のリンカー機能に依存します。別のアイデアは、リンカー ファイルが複雑になりすぎない限り、makefile を使用して実際に生成することです。Makefile でヘッダー ファイルを生成する方法については、Google で検索できる例がたくさんあります。リンカ ファイルを生成するために同じパスをたどることができます。

于 2012-06-08T01:42:31.443 に答える