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 

Ниже приведен код Makefile:

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

Почему вы получите два предупреждения:

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

You компилируют не связывание, не нужно ставить $(LDFLAGS), которые являются флагами компоновщика. Эти флаги применимы только для цели main, а не для цели main.o.

не Makefile- выводит исполняемый

Добавьте цель:

all: main 

сразу после DEPS определения. Мишень all будет выполнена первой и выполнит цель main.

+1

На самом деле здесь здесь не так. Рецепт для главной цели не строит 'main', он строит' $ (DESTDIR)/main'. Это не-нет; это означает, что каждый раз, когда вы запускаете 'make', он будет перемещать программу, даже если ничего не изменилось. Это правило должно быть изменено, так что цель - $ (DESTDIR)/main', а первая цель должна быть 'all: $ (DESTDIR)/main'. – MadScientist

Смежные вопросы