2012-08-03 5 views
8

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

行が

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行目にエラーが発生しました。 http://www.gnu.org/software/make/manual/make.html#Overview

は基本的にあなたがターゲットを作成する必要がありますし、それだけであなたのコマンドを置く:

+3

ここに少し冗長性があります。静的ライブラリでは '.o'ファイルを最初に' .a'ファイルに詰め込むのではなく、アプリケーションに直接リンクするだけで同じ結果が得られます。静的ライブラリは結局、結びついた '.o'ファイルの束にすぎません。 –

答えて

7

のような何か:

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 

(あなたが

はばかりのmakefileを自分自身を使用して開始し、私は、彼らはかなりトリッキーだと思いますが、あなたは彼らが働いて得れば、彼らは非常に簡単に命を作る開始し、このものを得る可能性がありますSOフォークは、それらを修正助けることができるPROBますバグのフルが、より経験豊富ないくつかのPROB)

実行するためとして、あなたは「Makefile」のようファイルを保存してください(ケースが重要である)

その後、CMDラインから(あなたのMakefileを含むディレクトリにcdを確保する):

$ make 

のthatsそれを!

UPDATE

中間静的ライブラリを使用すると、このような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) 
+0

上記のMakefileのいずれも動作していません。 –

+0

Makefile:25:***にセパレータがないというエラーが出ます。やめる。 2番目には 、Makefile:10:***には区切り文字がありません。やめる。 初めての場合 –

+0

この –

0

私はmakeコマンドの公式ドキュメントよりもより詳細な手順はありませんだと思います。ターゲットは、 'make'とタイプすると動作するようにするには 'all'にすることができます。良いメイクファイルは、lib/sourcesの追加に対して柔軟性を保つために、必ず変数などを使用します。

1

ファイルを作る理解するための最も簡単なチュートリアルでは、Cprogramming.comで利用可能です。理解したら、make fileマニュアルを参照してください。

+1

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 19056300) – NaN

関連する問題