12

ライブラリを使用してプログラムを実行するたびに、ターミナルでこれら 4 つのコマンドを実行する必要があります。

行は

cc -m32 -c mylib.c
ar -rcs libmylib.a mylib.o
cc -m32 -c prog.c
cc -m32 prog.o -L. -lmylib
./a.out

上記のコマンドのメイクファイルを作成して実行するにはどうすればよいですか? 詳細な手順をいただければ幸いです。ありがとう。


編集:ここに解決策があります:

a.out: prog.o libmylib.a
      cc prog.o -L. -lmylib

prog.o: prog.c mylib.h

libprint_int.a: mylib.o
      ar -rcs libmylib.a mylib.o

print_int.o: mylib.c mylib.h

clean:
      rm a.out prog.o libmylib.a mylib.o

タブの代わりにスペースを使用したため、2行目にエラーが発生しました。

4

3 に答える 3

11

何かのようなもの:

program_NAME := a.out

SRCS = mylib.c prog.c

.PHONY: all

all: $(program_NAME)

$(program_NAME): $(SRCS) 
    ar -rcs libmylib.a mylib.o
    cc -m32 prog.o -L. -lmylib

あなたが始めるかもしれません

自分でメイクファイルを使い始めたばかりで、かなりトリッキーだと思いますが、一度機能させると、生活がずっと楽になります(これはおそらくバグでいっぱいですが、経験豊富なSOの人々の一部はおそらくそれらを修正するのに役立つでしょう)

実行に関しては、必ず「Makefile」としてファイルを保存してください (大文字と小文字は重要です)。

次に、コマンド行から (Makefile を含むディレクトリに cd を実行してください):

$ make

それでおしまい!

アップデート

中間静的ライブラリが不要な場合は、次のような Makefile でスキップできます。

program_NAME := a.out

SRCS = mylib.c prog.c
OBJS := ${SRCS:.c=.o}

CFLAGS += -m32

program_INCLUDE_DIRS := 
program_LIBRARY_DIRS :=
program_LIBRARIES := mylib

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))

CC=cc

LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

.PHONY: all

all: $(program_NAME)

$(program_NAME): $(OBJS) 
    $(LINK.c) $(program_OBJS) -o $(program_NAME)
于 2012-08-03T07:42:13.737 に答える
1

make ファイルを理解するための最も簡単なチュートリアルは、Cprogramming.comにあります。それを理解したら、メイクファイルのマニュアルを読むことができます。

于 2012-08-03T07:55:28.053 に答える
1

make コマンドの公式ドキュメントより詳細な手順はないと思います: http://www.gnu.org/software/make/manual/make.html#Overview

基本的に、ターゲットを作成し、コマンドを入れるだけです。「make」と入力したときに動作させたい場合は、ターゲットを「all」にすることができます。優れたメイクファイルは、変数などを確実に使用して、lib/sources の追加に対して柔軟性を維持します。

于 2012-08-03T07:23:34.440 に答える