まず、あなたの実行可能test
を付けないようにRTOSのコードを使用していなくて使用している場合標準のプログラム名(POSIXでは少なくとも)。
次に、documentation of GNU makeを読んでください。チュートリアルのセクションが含まれています。最後に
、GNU makeをあなたはたとえば
this answerを参照してください
make -p
を得ることができますいくつかの組み込みのルールを持っています。
すべての警告とデバッグ情報(つまり、GCCを使用している場合はgcc -Wall -Wextra -g
)を使用してコンパイルすることを強くお勧めします。あなたのMakefile
にCFLAGS+= -Wall -Wextra -g
とCC=gcc
を入れてください。
-lcjson
とリンクするには、Makefile
のLIBES+= -lcjson
を追加してください。 のタブの文字はMakefile
で重要であることを覚えておいてください(たとえば、emacs
などの一部のエディターを使用して編集できます)。
ので、試してみてください。
# your Makefile, replace four spaces with tab
CC= gcc
CFLAGS+= -Wall -Wextra -g
RM= rm -f
MY_SOURCES=$(wildcard *.c)
## above could be an MY_SOURCES= file1.c file2.c otherfile.c
MY_OBJECTS=$(patsubst %.c,%.o,$(MY_SOURCES))
#
LIBES= -lcjson
#
.PHONY: all clean
##
all: myprog
##
clean:
$(RM) myprog *.o *~
myprog: $(MY_OBJECTS)
使用make --trace
またはremake
-x
もしあなたがすべき同じプログラムに一緒にリンク*.c
haver 複数のソースファイル(つまり、translation unitsある)、場合あなたのMakefile
をデバッグします共通のヘッダーファイルmyheader.h
(すべてのパブリック関数と変数の共通の宣言を共有する)があります。これは#include
です。すべてのソースファイルにあります。そして、あなたはそれに依存する必要があります。program arguments to gcc
の順序が重要な非常にである(とまたは任意のMakefile
なし)という
MY_HEADER= myheader.h
%.o: %.c $(MY_HEADER)
注意してください。 thisを参照してください。
私はあなたの質問がなぜ定義されていないと思うのですか?libを指定する順序を見直したいかもしれません。また-test1.cは-c test1.cでなければなりません。 – Pras
@Pras:いいえ、 '-c'はオブジェクトファイルを取得します。単一のソースファイルを実行可能ファイルにコンパイルするときは、*使用しないでください*。 –
@Aditya:あなたは '-lcjson'ライブラリのCコードをコンパイルしていません。あなたは*リンク*してそのライブラリを使用しています。 –