2013-07-14 67 views
0

我是makefile的新手。我不確定編譯後爲什麼可執行文件'main'沒有出現。代碼編譯罰款,但編譯器說:Makefile-不輸出可執行文件

-lm: linker input file unused because linking not done 

-ltiff: linker input file unused because linking not done 

下面是生成文件代碼:

INCLUDES = -I. -I../include -I/opt/local/include 
CC = gcc 
OBJS = image_io.o textfile_io.o main.o 
CFLAGS = $(INCLUDES) -c -g 
DESTDIR = ../bin 
LDFLAGS = -L. -L../lib -L/opt/local/lib -lm 
DEPS = file_io.h corr.h nmsimplex.h matrix.h /opt/local/include/tiffio.h \ 
     /opt/local/include/tiff.h 

image_io.o: image_io.c file_io.h /opt/local/include/tiffio.h \ 
       /opt/local/include/tiff.h 
    $(CC) $(CFLAGS) -o [email protected] $< $(LDFLAGS) -ltiff 

textfile_io.o: textfile_io.c file_io.h 
    $(CC) $(CFLAGS) -o [email protected] $< $(LDFLAGS) 

main.o: main.c file_io.h nmsimplex.h corr.h 
    $(CC) $(CFLAGS) -o [email protected] -fopenmp $< $(LDFLAGS) 

main: $(OBJS) 
    $(CC) -o $(DESTDIR)/[email protected] -fopenmp $^ $(LDFLAGS) 

.PHONY: clean 
clean: 
    rm -f *.o *~ 

謝謝

+0

爲什麼你在鏈接器標誌中包含鏈接時,只編譯? – 2013-07-14 20:50:56

+1

恐怕我做不到。 – 2013-07-14 20:55:21

+0

你是對的。我對這些條款有點新鮮。但是謝謝 – nineties

回答

2

爲什麼你會得到兩個警告:

main.o: main.c file_io.h nmsimplex.h corr.h 
    $(CC) $(CFLAGS) -o [email protected] -fopenmp $< $(LDFLAGS) 

你正在編譯不鏈接,不需要將$(LDFLAGS)作爲鏈接器標誌。這些標誌僅與main目標相關,而不適用於main.o目標。

Makefile-不輸出可執行

添加一個目標:

all: main 

右後DEPS定義。 all目標將首先執行並執行main目標。

+1

其實這裏有更多的錯誤。 'main'目標的配方不會構建'main',它將構建'$(DESTDIR)/ main'。這是一個禁忌;這意味着每次運行make時,即使沒有任何變化,它也會重新連接程序。這個規則應該改變,所以目標是'$(DESTDIR)/ main',第一個目標應該是'all:$(DESTDIR)/ main'。 – MadScientist