0

Minix 2.0.4 を使用しているため、gcc を使用できません。1 つの make ファイルを使用して、複数のターゲットで複数の C プログラムをコンパイルしたいと考えています。

これが私のMakefileの現在の状態です

CFLAGS  = -D_POSIX_SOURCE
LDFLAGS =
CC      = cc
LD      = cc

PROG    = prog1 prog2 
OBJS    = prog1.o prog2.o

$(PROG): $(OBJS)
         $(LD) $(LDFLAGS) $(OBJS) -o $(PROG)

clean:
         rm -rf $(PROG) $(OBJS)

ただし、このようにメイクファイルを使用しようとすると、「prog2: コンパイルできません。変換が適用されません」というエラーが表示されます。私が間違っていることについてのアイデアはありますか?

4

2 に答える 2

2

次のように分割します。

PROG1 = test 
PROG2 = test2
OBJ1 = test.o
OBJ2 = test2.o


all: $(PROG1) $(PROG2)

$(PROG1): $(OBJ1) 
          $(LD) $(LDFLAGS) $(OBJ1) -o $(PROG1)
$(PROG2): $(OBJ2) 
          $(LD) $(LDFLAGS) $(OBJ2) -o $(PROG2)

そのすべての置換があなたを緊張させるなら、もっと簡単に言うことができます

all: test test1

test: test.o
      $(LD) $(LDFLAGS) test.o -o test
test2: test2.o
      $(LD) $(LDFLAGS) test2.o -o test2

そして、これを最初から削除します:

PROG1 = test 
PROG2 = test2
OBJ1 = test.o
OBJ2 = test2.o

他にもショートカットがありますが、これはより具体的で明白です。

于 2013-10-09T00:46:33.627 に答える
0

求めていることだけを正確に実行するには、Makefile はまったく必要ありません。GNU Makeには、必要なもののための「組み込みルール」があります。

> ls Makefile
ls: cannot access Makefile: No such file or directory
> make prog1 prog2
cc   prog1.o   -o prog1
cc   prog2.o   -o prog2

ちなみに一般的には

> make prog1 prog2

all: prog1 prog2追加のターゲットを持ち、実行することとは微妙に異なります。

> make all

前者は最初のターゲットを作成し、次に 2 つ目のターゲットを完全に独立して作成します。2 つ目は、それらを 1 回の呼び出しで作成します。大きな makefile の場合はおそらく高速になり、 で呼び出された場合は並列で実行され-j ...、異なるメッセージ出力で実行される可能性があります。

于 2013-10-09T05:04:13.007 に答える