【发布时间】:2021-04-19 09:30:52
【问题描述】:
我创建了一个 make 文件来构建一个包含多个文件夹、多个库的项目。当我执行完全重建(即删除任何以前的对象和输出)时,一切都很顺利。但是如果我修改其中一个依赖项......它被编译(到目前为止一切都很好),图书馆被移动到正确的地方,但是链接器说"undefined reference to..."这个修改后的图书馆的许多符号。我还检查了我将库放在库列表中的顺序实际上很重要,并且我或多或少地遇到了上述错误。我做错了什么?谢谢!!!为了简单起见,我在这里省略了依赖项的构建。
#===== aliases =====
#--- compiler
CC:=g++
CFLAGS:=-g -Wall -ansi
KDEBUG:=0
APNAME:=MyApp
OBJS:=$(wildcard *.o)
#--- folders
MAINPATH:=/home/entity-k/KLABS/AppFolder
#MAINPATH:=.
SRCDIR:=$(MAINPATH)/src
EXEDIR:=$(MAINPATH)/bin
OBJDIR:=$(MAINPATH)/obj
LIBDIR:=$(MAINPATH)/lib
#--- output file
OUTPUT:=$(EXEDIR)/$(APNAME)
#--- include folders
INCLUDES = -I $(SRCDIR)/include
INCLUDES += -I $(SRCDIR)/kMath
INCLUDES += -I $(SRCDIR)/kStd
INCLUDES += -I $(SRCDIR)/kRTLib
INCLUDES += -I $(SRCDIR)/kSimCore
INCLUDES += -I $(SRCDIR)/kEXE
INCLUDES += -I $(SRCDIR)/NetIFC
INCLUDES += -I $(SRCDIR)/kEOM
INCLUDES += -I $(SRCDIR)/kFCS
INCLUDES += -I $(SRCDIR)/kPwrP
#--- List of dependencies
KSTD_LIB:= $(LIBDIR)/kstd.a
KMATH_LIB:= $(LIBDIR)/kmath.a
KRT_LIB:= $(LIBDIR)/krtlib.a
KSIMCORE_LIB:= $(LIBDIR)/ksimcore.a
KEXE_LIB:= $(LIBDIR)/kexe.a
KEOM_LIB:= $(LIBDIR)/keom.a
KNETIFC_LIB:= $(LIBDIR)/netifc.a
KPWRP_LIB:= $(LIBDIR)/kpwrp.a
KFCS_LIB:= $(LIBDIR)/kfcs.a
MAINOBJ:= $(OBJDIR)/main.o
MAIN_DEPENDS = $(MAINOBJ) $(KSTD_LIB) $(KMATH_LIB) $(KRT_LIB) $(KSIMCORE_LIB) $(KEXE_LIB)
MAIN_DEPENDS += $(KEOM_LIB) $(KPWRP_LIB) $(KFCS_LIB) $(KNETIFC_LIB)
LIBRARIES:= -lkeom -lksimcore -lkrtlib -lkmath -lkstd -lkexe -lrt -lnetifc -lkfcs -lkpwrp
#--- directives
vpath %.h ../include
ifeq ($(KDEBUG),1)
VERBOS:= -Xlinker --verbose
else
VERBOS:=
endif
all: $(OUTPUT)
#--- Clean tool ---
clean:
-rm $(OBJDIR)/*.o
-rm -R *.o
-rm $(OBJDIR)/*.a
-rm -R *.a
-rm $(EXEDIR)/*
-rm $(LIBDIR)/*.a
@echo all object file deleted, executable deleted
#--------- Build the main app executable -------------
$(OUTPUT): $(MAIN_DEPENDS)
@+echo
@echo "===== Linking the App - Full Build ====="
@$(CC) $(CFLAGS) $(VERBOS) -o $(OUTPUT) $(OBJDIR)/main.o -L$(LIBDIR) $(LIBRARIES)
@echo "Application build successfull. "
@+echo
【问题讨论】: