【发布时间】:2013-05-29 13:09:36
【问题描述】:
在尝试编译时,我的一个文件出现“未定义的 main 引用”错误。我知道这是因为这个文件没有 main 方法。这只是一些辅助方法的实现文件,所以我只希望它编译为目标文件而不是可执行文件。如果我明确地告诉 makefile 对每个文件做什么,我知道该怎么做,但是我正在尝试编写一个 makefile 来一次编译我的所有源。我尝试使用-c 标志,但随后它将我的所有文件编译为仅目标文件而不是可执行文件。我到底是怎么做到的?
这里是:
CC = gcc
CFLAGS = -g -Wall
SRCS = ./src/server.c ./src/client_slave.c ./src/sockaddrAL.c
EXECS = ./bin/server ./bin/client_slave
OBJS = $(SRCS:.c=.o)
all: clean $(SRCS) server client
server: $(OBJS)
$(CC) $(CFLAGS) ./src/server.o -o ./bin/server
client: $(OBJS)
$(CC) $(CFLAGS) ./src/client_slave.o -o ./bin/client_slave
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
clean:
@rm -f $(EXECS) $(OBJS)
【问题讨论】:
-
您发布的示例 Makefile 看起来应该可以正常工作。不是吗?
-
为了将来参考,不要在获得帮助后使用您从答案中获得的内容来编辑您的 makefile。那些进入这个线程的人会对为什么你有一个“-c”选项感到困惑,但有人建议它