0

機能を利用しようとしていsprintf()ます。したがって、C プロジェクトに stdio.h を含める必要があります。makefile に stdio.h を含めずにプロジェクトをコンパイルすると、コンパイラsprintf()は不明な関数であるエラーを生成します。stdio.h を makefile に含めると、「ターゲットを作成するルールがありません」というエラーが発生します。

makefile テンプレートは、次のようなオプションを提供します。

NAME   = test

CC      = arm-none-eabi-gcc
LD      = arm-none-eabi-ld -v
AR      = arm-none-eabi-ar
AS      = arm-none-eabi-as
CP      = arm-none-eabi-objcopy
OD      = arm-none-eabi-objdump

CFLAGS  =  -I./ -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb 
AFLAGS  = -ahls -mapcs-32 -o crt.o
ASFLAGS = -Wa,-gstabs 
LFLAGS  = -Tlinkerscript_rom.cmd -nostartfiles
CPFLAGS = -Obinary
ODFLAGS = -S

すべての標準関数を書き直すつもりはないので、あなたが私を助けてくれることを願っています。

スヴェン

4

3 に答える 3

2

Makefile はインクルード ファイルを読み取りません。C プリプロセッサは、結果のファイルがコンパイラによってコンパイルされる前に、インクルード ファイルを読み取ります。C ファイルにヘッダーを含める必要があります。追加するだけです:

#include <stdio.h>

関数定義などの前に、上部のどこかに。

これにより、関数の宣言がコンパイラに表示され、警告が削除されます。

于 2009-12-03T10:30:30.283 に答える
0

stdio.hをインクルードした後にエラーが発生した場合は、ツールチェーンが壊れています。プラットフォームを示すために質問を更新すると、修正を支援できる場合があります:)

于 2009-12-03T10:35:19.963 に答える
0

cファイルの先頭にstdio.hを含めるだけです

#include <stdio.h>

Makefile に .h ファイルを配置する唯一の理由は、ヘッダー内の何かが変更された場合に、ヘッダーに依存するファイルが再コンパイルされるようにするためです。言うまでもなく、これは、作成したヘッダー ファイルで最も一般的です。

于 2009-12-03T10:30:40.970 に答える