2013-10-09 65 views
0

我使用的是Minix 2.0.4,所以我不能使用gcc。我想用一個make文件來編譯多個C程序,並帶有多個目標。是否可以使用CC編譯器編譯多個目標文件?

這裏是我的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) 

然而,當我嘗試使用我的makefile這樣的就是一個錯誤,指出「PROG2:不能編譯,不轉化應用」。關於我在做什麼的任何想法都是錯誤的?

+0

我認爲這回答過這一次:http://stackoverflow.com/questions/19213584/creating-makefile-that-c​​ompiles-multiple-c-files-for-use-in-minix –

+0

我試過,並認爲它起初工作,但它只編譯了第一套程序。它完全忽略了OBJ2和PROG2。 – johns4ta

+0

「make test」會做測試。 「make test2」會做test2。如果你想讓「做」成爲兩個,這是一個不同的問題。 –

回答

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) 

如果所有subsitution讓你緊張,你可以更簡單地說

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 

還有其他捷徑,但這更具體和明顯。

+0

非常感謝您的幫助。我跑遍了所有:之前,但假設它只在gcc中。 – johns4ta

+3

這對目標「全部」沒有什麼特別之處。它恰好是Makefile中的第一個目標,所以沒有參數的「make」使它成爲可能。 –

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 

前者使第一個目標,然後第二個完全獨立,就像在兩個連續的調用中一樣。第二個,它們在一次調用中:對於大型生成文件可能更快,如果與-j ...一起調用,並且可能具有不同的消息輸出,可能會並行執行。

相關問題