2012-09-26 31 views
0

我有一個makefile只是不工作。你們能幫我找出錯誤在哪裏嗎?謝謝!我的Makefile不起作用。

CC = gcc 
FILES = workfile.c insert.c 
TARGETS = exe 
CFLAGS = -o 
DBUG = 
RM = rm -f 
OBJS = *.o 

#Master Rule 

all: $(TARGETS) 

#Build 

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe 

#workfile 

workfile.o: workfile.c 
    $(CC) $(DBUG) -c *.c 

insert.o: insert.c 
    $(CC) $(DBUG) -c *.c 

clean: 
    $(RM) $(TARGETS) $(OBJS) 

的錯誤如下

$make all 
gcc -c *.c 
gcc -o workfile.o insert.o exe 
gcc: error: exe: No such file or directory 
make: *** [exe] Error 1 

我甚至試圖改變目標的名稱。但沒有幫助。無法繼續進一步。

+0

您已指定'exe'這裏'$(CC)$(CFLAGS的一個輸入端)$(DBUG)workfile.o insert.o exe'。這是打算?也許你的意思是'-o exe' – luk32

+0

@ luk32是的。 :) – Shash

+0

如果你打算這麼做,那麼在規則運行之前'exe'必須存在。你只是放錯了'-o'選項。 –

回答

1

我認爲將-o放在CFLAGS不是一個好主意,我寧願從中刪除-o

CFLAGS = -o - >CFLAGS =

現在,您可以exe,輸出路徑上工作應緊跟-o

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe 

=>

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) -o exe workfile.o insert.o 

,所以該完整的makefile應該是這樣的:

CC = gcc 
FILES = workfile.c insert.c 
TARGETS = exe 
CFLAGS = 
DBUG = 
RM = rm -f 
OBJS = *.o 

#Master Rule 

all: $(TARGETS) 

#Build 

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) -o exe workfile.o insert.o 

#workfile 

workfile.o: workfile.c 
    $(CC) $(DBUG) -o workfile.o -c workfile.c 

insert.o: insert.c 
    $(CC) $(DBUG) -o insert.o -c insert.c 

clean: 
    $(RM) $(TARGETS) $(OBJS) 
1

您的CFLAGS被錯誤地使用。 -o選項應在exe之前,CFLAGS應包含編譯器的相關標誌(例如-O3 -Wall -Wextra -Werror)。

試試這個:

CFLAGS = -Wall -Wextra -Werror 

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o exe 

PS:您可以剝去DBUG並在需要時在CFLAGS-g。這是它在普通Makefiles中的使用方式。

+0

非常感謝!有效。 – Shash

1

呃我明白了......你在cflags中有一個-o。我認爲你不應該在CFLAGS中使用-o,因爲它需要一個參數。

是可以改變的最重要的部分:

CFLAGS = 
OUTFILE = fancy_exe 
[...] 
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o $(OUTFILE) 

這應該更好地工作......甚至跳過OUTFILE varaible並用手把exe文件。