2013-07-14 4 views
0

저는 makefile을 처음 사용합니다. 나는 왜 컴파일 된 후에 실행 파일 'main'이 나타나지 않는지 잘 모르겠다. 코드는 잘 컴파일하지만 컴파일러는 말한다 : 아래 Makefile- 실행 파일을 출력하지 않습니다.

-lm: linker input file unused because linking not done 

-ltiff: linker input file unused because linking not done 

는 메이크 코드 :

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

당신에게 :

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

링크하지 않을 때 링커 플래그를 포함시키는 이유는 무엇입니까? –

+1

나는 할 수 없었습니다. –

+0

네 말이 맞아. 나는이 용어에 조금 새로운 것이었다. 하지만 고마워요. – nineties

답변

2

링커 플래그 인 $(LDFLAGS)을 넣을 필요가 없습니다. 이 플래그는 main 타겟에만 관련이 있으며 main.o 타겟에는 해당되지 않습니다.

이 대상을 추가 실행 파일을 출력하지 Makefile- :

all: main 

바로 정의 DEPS 후. all 대상이 먼저 실행되고 main 대상이 실행됩니다.

+1

실제로 더 많은 문제가 있습니다. 'main' 타겟을위한 레시피는'main'을 빌드하지 않고'$ (DESTDIR)/main'을 빌드합니다. 그것은 아니오입니다. 그것은 make가 실행될 때마다 아무 것도 변경되지 않아도 프로그램을 다시 링크한다는 것을 의미합니다. 이 규칙은 대상이'$ (DESTDIR)/main'으로 변경되어야하며 첫 번째 대상은'all : $ (DESTDIR)/main'이어야합니다. – MadScientist

관련 문제