c++ - 编译错误/usr/bin/ld : cannot open output file bin/server: No such file or directory

标签 c++ makefile

我正在尝试使用 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/

相关文章:

build - 从 make 文件中禁用 make 内置规则和变量

C++ 11 future_status::deferred 不工作

c++ - 文字 charT 数组

c++ - 如何告诉我的程序在等待用户命令时做某事?

python - Snow Leopard 上的 mod_wsgi python 版本不匹配

makefile - 如何在 Windows-10 上编译 REDIS 5.0.5,make 出错

c - 带有头文件的 makefile

c++ - 如何使用 == 运算符比较数组的元素

c++ - 在没有 QApplication 的情况下使用 Qts QXmlSchemaValidator

c++ - C++ 程序上的文件依赖性和模板问题