C 如何仅为对象和头文件创建make文件?

C 如何仅为对象和头文件创建make文件?,c,makefile,C,Makefile,我正在使用set.h接口执行黑盒测试,在该接口中我无法访问set.c,我已经获得了对象文件set.o,我需要在main.c文件中为集合编写一系列测试。如何创建包含set.o、set.h和main.c的makefile **我已经有set.o文件,所以我不必使用set.c重新生成它 我很困惑,因为我只知道如何使用完整的文件来实现这一点 这是我的模板 CC = clang CFLAGS = -g -Wall PROG = example HDRS = set.h SRCS = main.c O

我正在使用
set.h
接口执行黑盒测试,在该接口中我无法访问
set.c
,我已经获得了对象文件
set.o
,我需要在
main.c
文件中为集合编写一系列测试。如何创建包含
set.o
set.h
main.c
的makefile

**我已经有set.o文件,所以我不必使用set.c重新生成它

我很困惑,因为我只知道如何使用完整的文件来实现这一点

这是我的模板

CC = clang
CFLAGS = -g -Wall

PROG = example
HDRS = set.h
SRCS = main.c 

OBJDIR = object
OBJS = $(OBJDIR)/main.o $(OBJDIR)/set.o

# compiling rules

$(PROG): $(OBJS) $(OBJDIR)
    $(CC) $(CFLAGS) $(OBJS) -o $(PROG)

$(OBJDIR)/set.o: set.h $(HDRS) $(OBJDIR)
    $(CC) $(CFLAGS) -c set.h -o $(OBJDIR)/set.o

$(OBJDIR)/main.o: main.c $(HDRS) $(OBJDIR)
    $(CC) $(CFLAGS) -c main.c -o $(OBJDIR)/main.o

$(OBJDIR):
    mkdir $(OBJDIR)

clean:
    rm -f $(PROG) $(OBJS)

如果您已经拥有set.o文件,则无需为其创建规则,只需使用它即可。还要注意,我去掉了mkdir,因为如果您已经有了一个
set.o
,它应该已经在objects/right中了

CC = clang
CFLAGS = -g -Wall

PROG = example
HDRS = set.h
SRCS = main.c 

OBJDIR = object
OBJS = $(OBJDIR)/main.o

# compiling rules

$(PROG): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) $(OBJDIR)/set.o -o $(PROG)

$(OBJDIR)/main.o: main.c $(HDRS)
    $(CC) $(CFLAGS) -c main.c -o $(OBJDIR)/main.o

clean:
    rm -f $(PROG) $(OBJS)

如果您已经拥有set.o文件,则无需为其创建规则,只需使用它即可。还要注意,我去掉了mkdir,因为如果您已经有了一个
set.o
,它应该已经在objects/right中了

CC = clang
CFLAGS = -g -Wall

PROG = example
HDRS = set.h
SRCS = main.c 

OBJDIR = object
OBJS = $(OBJDIR)/main.o

# compiling rules

$(PROG): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) $(OBJDIR)/set.o -o $(PROG)

$(OBJDIR)/main.o: main.c $(HDRS)
    $(CC) $(CFLAGS) -c main.c -o $(OBJDIR)/main.o

clean:
    rm -f $(PROG) $(OBJS)

检查编译器选项中是否有“仅链接”。检查编译器选项中是否有“仅链接”。我一直收到此错误,
Makefile:16:**缺少分隔符。停止。
如果要复制和粘贴,请确保有选项卡而不是空格。刚意识到你在用叮当声。试试编辑后的答案,我已经实现了。现在,当我使用make时,它说
clang-g-Wall-cmain.c-o object/main.o
,然后继续说错误:使用标识符集。set声明在set.hdo中,您在main.c中有
#include“set.h”
?当我将$(OBJDIR)/set.o更改为set.o时,它会起作用,为什么?我一直收到此错误,
Makefile:16:**缺少分隔符。停止。
如果要复制和粘贴,请确保有选项卡而不是空格。刚意识到你在用叮当声。试试编辑后的答案,我已经实现了。现在,当我使用make时,它说
clang-g-Wall-cmain.c-o object/main.o
,然后继续说错误:使用标识符集。set声明在set.hdo中您在main.c中有
#include“set.h”
?当我将$(OBJDIR)/set.o更改为set.o时,它会起作用,为什么?