1. ホーム
  2. makefile

[解決済み] makefileでLDFLAGSを使用する方法

2022-03-04 17:05:21

質問

私はLinux OSの初心者です。をコンパイルしようとしています。 .c ファイルを makefile を使って作成します。数学ライブラリはリンクされなければなりません。私のmakefileは次のようなものです。

CC=gcc
CFLAGS=-Wall -lm

all:client

.PHONY: clean
clean:
    rm *~ *.o client

を実行すると make というエラーが表示されます。

"undefined reference to rint"

そのため、数学ライブラリをリンクすることができません。

を使って明示的にコンパイルすると

gcc client.c -lm -o client

を実行すると、コンパイルに成功します。

では、どのようにmakefileを変更すれば、うまくいくのでしょうか?私はすでに LDFLAGS=-lm . でも、同じエラーが出ます。

を実行したときにも make に展開されます。

gcc -Wall -lm client.c -o client

(を実行したときに気づくこと)。 gcc で明示的に -lm を末尾につけると動作します)。

解決方法は?

リンカ(ld)は明らかにmakeがGCCの引数を並べる順番を好まないので、Makefileを少し変更する必要があります。

CC=gcc
CFLAGS=-Wall
LDFLAGS=-lm

.PHONY: all
all: client

.PHONY: clean
clean:
    $(RM) *~ *.o client

OBJECTS=client.o
client: $(OBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) -o client $(LDFLAGS)

を定義している行で クライアント ターゲットの順番を変更します。 $(LDFLAGS) を使用します。