遇到makefile的问题,修改了我的2个源文件link_ec.c和link_cloud.c,以及2个头文件link_ec.h和link_cloud.h,但是没有重新编译makefile。是不是写的地方有问题?
我的makefile如下:
LIB_FOR_JSON = ./lib/json_lib/*
LIB_FOR_MQTT = ./lib/mqtt_lib/*
SRC_DIR = ./src
OUTPUT_DIR = ./output
SYS_LOCAL_LIB_DIR = /usr/local/lib
TARGET = linkCloudApp
RM = rm -rf
MV = mv
CP = cp -r
LDCONFIG = ldconfig
#### compile comment #####
COMPILE = aarch64-linux-gnu-
CC = $(COMPILE)gcc
STRIP = $(COMPILE)strip
LD = $(COMPILE)ld
COMPILE_OPTION = -O2 -Wall -Wcomment -Wformat -Wmissing-braces -Wswitch -Wuninitialized \
-Wbad-function-cast -Waggregate-return -Wmultichar -Wsign-compare -Wshadow
#COMPILE_OPTION_DEBUG = -gdwarf-2 -g
COMPILE_ALL_OPTION += $(COMPILE_OPTION) $(COMPILE_OPTION_DEBUG)
LINK_OPTION = -lpaho-mqtt3a -ljson-c -lm -lpthread -lz
OBJS_MAIN = main.o
OBJS_LINK_EC = link_ec.o
OBJS_LINK_CLOUD = link_cloud.o
OBJS = $(OBJS_MAIN) $(OBJS_LINK_EC) $(OBJS_LINK_CLOUD)
$(TARGET):$(OBJS)
$(CC) -o $(OUTPUT_DIR)/$(TARGET) $(OBJS) $(LINK_OPTION)
$(STRIP) $(OUTPUT_DIR)/$(TARGET)
$(OBJS_MAIN):
$(CC) -c $(SRC_DIR)/main.c $(COMPILE_ALL_OPTION)
$(OBJS_LINK_EC):
$(CC) -c $(SRC_DIR)/link_ec.c $(COMPILE_ALL_OPTION)
$(OBJS_LINK_CLOUD):
$(CC) -c $(SRC_DIR)/link_cloud.c $(COMPILE_ALL_OPTION)
.PHONY:clean copylib
clean:
-$(RM) $(OUTPUT_DIR)/* $(OBJS)
copylib:
$(CP) $(LIB_FOR_MQTT) $(SYS_LOCAL_LIB_DIR)/
$(CP) $(LIB_FOR_JSON) $(SYS_LOCAL_LIB_DIR)/
$(LDCONFIG)
您的目标文件配方没有与它们相关的任何依赖项,因此除非您明确指定它们,否则它们不会被构建。
将 .c 文件添加到依赖项列表:
$(OBJS_MAIN): $(SRC_DIR)/main.c
$(CC) -c $(SRC_DIR)/main.c $(COMPILE_ALL_OPTION)
$(OBJS_LINK_EC): $(SRC_DIR)/link_ec.c
$(CC) -c $(SRC_DIR)/link_ec.c $(COMPILE_ALL_OPTION)
$(OBJS_LINK_CLOUD): $(SRC_DIR)/link_cloud.c
$(CC) -c $(SRC_DIR)/link_cloud.c $(COMPILE_ALL_OPTION)
或者您可以为所有 .o 文件创建一个通用目标:
%.o: $(SRC_DIR)/%.c
$(CC) $(COMPILE_ALL_OPTION) -c $<
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句