为什么修改了源文件和头文件,但是没有重新编译makefile

guoyanzhang

遇到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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

更改头文件时,如何使Makefile重新编译?

头文件更改时无法重新编译Makefile

带有实现和头文件的 Makefile

“重新编译”所有文件或只是更改了文件

为什么要“重新编译”所有文件?

如何避免重新编译头文件

为什么我的 Makefile 在没有更改的情况下不断重新编译

为什么我的 Makefile 在没有更改的情况下会不断重新编译?

为什么即使代码没有任何变化,我的目标也总是重新编译可执行文件?

如何安装 C 源文件和头文件?

CMakeLists - 如何包含源文件和头文件的目录?

header.h:即使源文件和头文件位于同一目录中,也没有此类文件或目录

更改时,CMake不会重新编译源文件吗?

Java gradle build 不重新编译源文件

无法重新编译android资源文件

Elixir-为什么这些重复的头文件没有编译器警告?

为什么带有头文件的makefile不起作用?

为什么即使这些文件未更改,Build&Reload也要重新编译所有C ++文件?

为什么我的Makefile每次都会重新编译?

Makefile,为什么每次都要重新编译?

为什么 make 重新编译这个 makefile 中的所有内容?

用于Java的makefile,仅在文件更改时重新编译

C Makefile - 仅重新编译更改的文件

如何防止SBT重新编译修改的.class文件?

数组没有被方法修改,但是在使其长度为 0 并使用 push 方法后,它被修改了为什么

为什么在包含标准库中的头文件时不需要向编译器传递相应的源文件?

用1个main编译多个C和头文件

编译-链接.cpp和头文件时出错

重新编译CHM文件