C Makefile-不输出可执行文件
我不熟悉makefile。我不确定编译后为什么不出现可执行文件“main”。代码编译得很好,但编译器说:C Makefile-不输出可执行文件,c,macos,makefile,C,Macos,Makefile,我不熟悉makefile。我不确定编译后为什么不出现可执行文件“main”。代码编译得很好,但编译器说: -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 = im
-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 $@ $< $(LDFLAGS) -ltiff
textfile_io.o: textfile_io.c file_io.h
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
main.o: main.c file_io.h nmsimplex.h corr.h
$(CC) $(CFLAGS) -o $@ -fopenmp $< $(LDFLAGS)
main: $(OBJS)
$(CC) -o $(DESTDIR)/$@ -fopenmp $^ $(LDFLAGS)
.PHONY: clean
clean:
rm -f *.o *~
include=-I.-I../include-I/opt/local/include
CC=gcc
OBJS=image\u io.o textfile\u io.o main.o
CFLAGS=$(包括)-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文件_io.h/opt/local/include/tiffio.h\
/opt/local/include/tiff.h
$(CC)$(CFLAGS)-o$@$<$(LDFLAGS)-ltiff
textfile_io.o:textfile_io.c file_io.h
$(CC)$(CFLAGS)-o$@$<$(LDFLAGS)
main.o:main.c文件_io.h nmsimplex.h corr.h
$(CC)$(CFLAGS)-o$@-fopenmp$<$(LDFLAGS)
main:$(OBJS)
$(CC)-o$(DESTDIR)/$@-fopenmp$^$(LDFLAGS)
.假冒:干净
清洁:
rm-f*.o*~
谢谢为什么会收到这两个警告:
main.o: main.c file_io.h nmsimplex.h corr.h
$(CC) $(CFLAGS) -o $@ -fopenmp $< $(LDFLAGS)
就在
DEPS
定义之后。首先执行all
目标,然后执行main
target 当你没有链接,只是编译的时候,为什么要把链接器标志包括进来?恐怕不行。你说得对。我对这些条款有点陌生。但谢天谢地,事实上这里有更多的错误。main
目标的配方不生成main
,而是生成$(DESTDIR)/main
。这是不可以的;这意味着每次运行make
时,即使没有任何更改,它也会重新链接程序。应更改此规则,使目标为$(DESTDIR)/main
,第一个目标应为all:$(DESTDIR)/main
。
all: main