这是一个makefile,无法链接.o文件以生成可执行文件。

enter code here
CC = c99
CFLAGS = -g -Wall -Wextra -O0
OBJECTS = main.o getoptions.o
P = testprog

$(P): $(OBJECTS)
    $(CC) $(OBJECTS) -o $(P)

main.o : main.c
    $(CC) $(CFLAGS) $(OBJECTS) -c main.c

getoptions.o : getoptions.c getoptions.h
    $(CC) $(CFLAGS) -c getoptions.o

我收到此警告:
gcc: warning: getoptions.o: linker input file unused because linking not done

当我手动使用时:
c99 *.o -o testprog

链接成功。

最佳答案

这里有两个问题:

首先,在getoptions.o的目标中,将getoptions.o传递给-c选项。您应该为其提供源文件getoptions.c的值

其次,在$(OBJECTS)的目标中摆脱main.o。您无需为此步骤传递目标文件。

有了这些修复,您将获得成功的编译:

c99 -g -Wall -Wextra -O0 -c main.c
c99 -g -Wall -Wextra -O0 -c getoptions.c
c99 main.o getoptions.o -o testprog


编辑:

main.o的目标行应为:

main.o : main.c getoptions.h


这样,如果getoptions.h更改,则会重新构建main.o

关于c - Makefile失败并显示警告消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31897327/

10-12 16:10