C Makefile链接器错误 –
我在下面写了Makefile。 我在编译期间收到以下错误。 我不确定IBS
是什么? 它是否缺少LIBS
的L
或其他东西?
关注问题:
这是目录结构。
. ├── 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)