2

私は C を学びながら、コンパイルを容易にするために make を学ぼうとしています。

私はやろうとしています:

gcc -Wall -g    3.c -o 3 -lm

使用して

CC = gcc
CFLAGS = -Wall -g

clean:
        rm -f 3

しかし、makefile に -lm を入れる方法と場所がわかりません。オンラインでチュートリアルを探しましたが、「-lm」オプションに具体的に対処していないか、説明がほとんどなく、私の状況では機能しません。

4

5 に答える 5

2

gcc コマンドを実行する「ターゲット」が必要です。お気に入り:

CC = gcc
CFLAGS = -Wall -g

all:
    gcc -Wall -g 3.c -o 3 -lm

clean:
    rm -f 3

次に、「all」コマンドの一部をマクロに置き換えるだけです。たとえば、CFLAGS にはおそらく「-lm」が含まれます。

「make -n」を実行すると、make が実行された場合の動作がわかります。

于 2012-10-14T02:02:31.777 に答える
2

多くの場合、LIBS変数にライブラリ固有のフラグが表示されます。たとえば、次のようになります。

CC = gcc
CFLAGS = -Wall -g -I/some/include/directory
LIBS = -lm -L/some/library/directory

all:
    $(CC) $(CFLAGS) $(LIBS) 3.c -o 3
于 2012-10-14T02:03:40.263 に答える
2

探している変数は と呼ばれLDLFAGSます。GNU Makeマニュアルの§10.3から:

LDFLAGS

コンパイラがリンカ 'ld' を呼び出すときにコンパイラに与える追加のフラグ。

したがって、単純に次のようにします。

LDFLAGS += -lm

それが役に立てば幸い。

于 2012-10-14T02:06:18.507 に答える
0

GNU make は多くのデフォルト ルールを定義します。C のコンパイルとリンクのルールは次のとおりです。

no は、'$(CC) $(CPPFLAGS) $(CFLAGS) -c' という形式のレシピで nc から自動的に作成されます。

n は、C コンパイラを介してリンカ (通常は ld と呼ばれる) を実行することにより、no から自動的に作成されます。使用される正確なレシピは、'$(CC) $(LDFLAGS) no $(LOADLIBES) $(LDLIBS)' です。

したがって、リンカーに「-lm」オプションを追加する方法は、次のように定義することです。

LDLIBS = -lm

次に、Makefile を使用して make を実行すると、次のコマンドが実行されます。

gcc -Wall -g -c 3.c
gcc 3.o -o 3 -lm

(make は C プログラムを 2 つのステップでコンパイルすることに注意してください。最初にオブジェクト ファイルを作成し 3.o、次にオブジェクト ファイルを実行可能ファイルにリンクします 3)

( GNU make マニュアルについては、http://www.gnu.org/software/make/manual/を参照してください)

于 2012-10-14T02:25:06.857 に答える
0

非常に優れたチュートリアル: Make チュートリアル: Makefile の書き方

そして、ここに私が書いた良い一般的なメイクファイルがあります:

http://pastebin.com/PCk0gNtE

最も関心のある部分は、このセクションです。

# C Preprocessor Flags
CPPFLAGS +=
# compiler flags
CFLAGS += -ansi -Wall -Wextra -pedantic-errors
# libraries to link to ( m == math )
program_LIBRARIES := m
# LDFLAGS is the variable to hold linker flags
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))
于 2012-10-14T02:08:06.990 に答える