【问题标题】:Why are the source and header files modified, but the makefile is not recompiled为什么修改了源文件和头文件,但是makefile没有重新编译
【发布时间】:2021-05-27 03:05:48
【问题描述】:

我遇到了关于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 makefile


    【解决方案1】:

    您的目标文件配方没有与之关联的任何依赖项,因此除非您明确指定它们,否则它们不会被构建。

    将 .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 $<
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2019-05-14
      • 2012-04-04
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      相关资源
      最近更新 更多