我正在尝试使用 ubuntu 中的 makefile 编译我的 C 程序。但我不知道它有什么问题。还有一个我无法修复的错误。
gcc -Wall -I. -pthread -ggdb -g -O0 -o bin/server server/message_queue.o server/client_thread.o server/server.o server/file.o server/datatypes.o common/datatypes.o common/error.o common/socket.o
/usr/bin/ld: cannot open output file bin/server: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [bin/server] Error 1
这是一个生成文件:
CC=gcc
CFLAGS=-Wall -I. -pthread -ggdb -g -O0
SERVER_OBJ=\
server/message_queue.o \
server/client_thread.o \
server/server.o \
server/file.o \
server/datatypes.o
COMMON_OBJ=\
common/datatypes.o \
common/error.o \
common/socket.o
CLIENT_OBJ=\
client/send_thread.o \
client/recv_thread.o \
client/terminal_thread.o \
client/client.o \
client/datatypes.o
BIN=bin
all: server client
server: $(BIN)/server
client: $(BIN)/client
$(BIN)/server: $(SERVER_OBJ) $(COMMON_OBJ)
$(CC) $(CFLAGS) $(SERVER_CFLAGS) -o $@ $^
$(BIN)/client: $(CLIENT_OBJ) $(COMMON_OBJ)
$(CC) $(CFLAGS) $(CLIENT_CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^
clean:
rm -f server
可能是我忘了安装 linux 的东西?
最佳答案
您的问题很简单:您在链接可执行文件之前没有检查目录 bin 是否存在。另外,您的 makefile 有点乱。那一个应该做你想做的:
BIN := bin
CLIENT := $(BIN)/client
SERVER := $(BIN)/server
COMMON_SRC := $(wildcard common/*.c)
COMMON_OBJ := $(COMMON_SRC:.c=.o)
CLIENT_SRC := $(wildcard client/*.c)
CLIENT_OBJ := $(CLIENT_SRC:.c=.o)
SERVER_SRC := $(wildcard server/*.c)
SERVER_OBJ := $(SERVER_SRC:.c=.o)
CPPFLAGS := -I. -pthread
CFLAGS := -Wall -ggdb -g -O0
LDFLAGS := -pthread
.PHONY: all client server clean fclean
all: client server
client: $(CLIENT)
server: $(SERVER)
$(CLIENT): $(COMMON_OBJ) $(CLIENT_OBJ) | $(BIN)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
$(SERVER): $(COMMON_OBJ) $(SERVER_OBJ) | $(BIN)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
$(BIN):
mkdir $@
clean:
@$(RM) -rv $(BIN) $(COMMON_OBJ) $(CLIENT_OBJ) $(SERVER_OBJ)
关于c++ - 编译错误/usr/bin/ld : cannot open output file bin/server: No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27471676/