C Makefile链接器错误 –

我在下面写了Makefile。 我在编译期间收到以下错误。 我不确定IBS是什么? 它是否缺少LIBSL或其他东西?

关注问题:

这是目录结构。

 . ├── Makefile └── src ├── include │ └── utils.h ├── main.c └── utils.c 

但是,当我运行make时,这是输出。 它似乎没有拿起并构建文件utils.c

cc -I./src -I./src/include -I / usr / local / include / upm -MMD -MP -c src / main.c -o build /./ src / main.coo

 TARGET_EXEC ?= app.out BUILD_DIR ?= ./build SRC_DIRS ?= ./src SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c -or -name *.s) OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) DEPS := $(OBJS:.o=.d) INC_DIRS := $(shell find $(SRC_DIRS) -type d) INC_FLAGS := $(addprefix -I,$(INC_DIRS)) -I/usr/local/include/upm CPPFLAGS ?= $(INC_FLAGS) -MMD -MP $(BUILD_DIR)/$(TARGET_EXEC): $(OBJS) $(CC) $(OBJS) -o $@ $(LDFLAGS) LD_FLAGS = -L/usr/local/lib/upm -L/usr/lib/rabbitmq LIBS = -lrabbitmq -lupmc-rn2483 -lupmc-rn2903 -lupmc-utilities # c source $(BUILD_DIR)/%.co: %.c $(MKDIR_P) $(dir $@) $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@.o $(CC) $(LD_FLAGS) $@.o -o $@ $LIBS .PHONY: clean clean: $(RM) -r $(BUILD_DIR) -include $(DEPS) MKDIR_P ?= mkdir -p 

  $(CC) $(LD_FLAGS) $@.o -o $@ $LIBS # wrong ^^^^^ 

是错的。 Makefile变量需要括号: $(LIBS)和你的$LIBS被理解为$(L)IBS并且你没有任何L变量(所以$LIBS扩展到IBS因为$L扩展为空)

顺便说一句,您可以使用make --trace或使用-x 重制来查找该错误

关于编辑过的问题,我认为你为这么小的程序提供这么复杂的源代码树可能是错的(一般来说,不到几十万行的小程序在平面源代码树中处理起来比较简单,那就是包含*.c*.h源文件的单个目录。 但是,你可能会考虑

  INC_DIRS = $(wildcard */include)