C程序makefile和对象链接行为

问题描述 投票:0回答:1

我有一个C程序有]

 main.c which include my.h and my1.h 
 my.c   has a function function myprint 
 my1.c   has a function function myprint1

一切正常。当我使用makefile进行编译时,该功能在没有my.h and my1.h的情况下可以正常工作。

#my makefile
OBJDIR = .compile/objs/
CC = gcc
CFLAGS  = -g -Wall --verbose
INCLUDE = -I/usr/local/include
LDFLAGS = -L/usr/local/lib
LDLIBS = -lcurl
RM = rm -rf
SRC = src/
TARGET = main
VERSION = 1.0.0

SOURCES := $(wildcard $(SRC)*.c)
OBJECTS := $(patsubst %.c, %.o, $(SOURCES))
DEPENDS := $(patsubst %.c, %.d, $(SOURCES))

#.PHONY: all build

all: $(TARGET) clean

$(TARGET): $(OBJECTS)
    $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ $(INCLUDE) $(OBJECTS)
-include $(DEPENDS)

$(OBJECTS): $(SRC)%.o: $(SRC)%.c
    $(CC) $(CFLAGS) -c -MMD -MP $< -o $@

build:
    @mkdir -p bin $(OBJDIR)

clean:
    $(RM) $(OBJECTS) $(DEPENDS)
    $(RM) $(OBJDIR)

我的问题是:为什么即使删除my.hmy1.h,函数调用仍然起作用。

[当创建对象时,my.omy1.o将自动链接到main.o吗?什么时候我们需要包括那个?

我有一个包含main.c的C程序,其中包括my.h和my1.h。my.c具有功能函数myprint my1.c具有功能函数myprint1一切正常。当我使用...

c gcc makefile g++ clang
1个回答
0
投票

main(可执行文件)仅取决于main.omy.omy1.o的对象。生成main时,请查看main.omy.omy1.o的时间戳,并注意不需要构建它们,因此不会打扰检查头文件。如果您使用rm *.o,则make会抱怨它不知道如何构建my.h,但是只要目标文件存在,make甚至都不会检查头文件的存在。

© www.soinside.com 2019 - 2024. All rights reserved.