我有一个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.h
或my1.h
,函数调用仍然起作用。
[当创建对象时,my.o
和my1.o
将自动链接到main.o
吗?什么时候我们需要包括那个?
我有一个包含main.c的C程序,其中包括my.h和my1.h。my.c具有功能函数myprint my1.c具有功能函数myprint1一切正常。当我使用...
main
(可执行文件)仅取决于main.o
,my.o
和my1.o
的对象。生成main
时,请查看main.o
,my.o
和my1.o
的时间戳,并注意不需要构建它们,因此不会打扰检查头文件。如果您使用rm *.o
,则make会抱怨它不知道如何构建my.h
,但是只要目标文件存在,make甚至都不会检查头文件的存在。