深入理解使用特定案例如何解释makefiles
我试图深入理解makefile是如何工作的 例如,我有以下一个:深入理解使用特定案例如何解释makefiles,makefile,Makefile,我试图深入理解makefile是如何工作的 例如,我有以下一个: CC = gcc CFLAGS = -I. DEPS = int_array.h OBJS = int_array.o test_int_array.o %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) test_int_array: $(OBJS) $(CC) -o $@ $^ $(CFLAGS) clean: rm -rf *.o test_int
CC = gcc
CFLAGS = -I.
DEPS = int_array.h
OBJS = int_array.o test_int_array.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
test_int_array: $(OBJS)
$(CC) -o $@ $^ $(CFLAGS)
clean:
rm -rf *.o test_int_array *.dSYM
这意味着生成一个名为“test_int_array”的可执行文件(基本上由右侧的$(OBJS)
文件中的这些选项-o$@
表示)(使用选项$^
)
这两种情况都需要$(CFLAGS)
吗?顺序重要吗?在示例中:
test_int_array: $(OBJS)
$(CC) -o $@ $^ $(CFLAGS)
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
$@
是此规则的目标文件名:test\u int\u array
$^
是所有先决条件的名称。这将是包含在
OBJS
中的任何内容,因此:int\u array.o test\u int\u array.o
在示例中:
test_int_array: $(OBJS)
$(CC) -o $@ $^ $(CFLAGS)
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
%.o:%.c$(DEPS)
$(CC)-c-o$@$<$(CFLAGS)
$在Makefile中,每个规则都遵循以下格式:
resulting_file : source_files
steps to get resulting_file from source_files
在规则中分别称为lefthand和righthand的是生成的_文件和源_文件
%.ext:%.ext2
是一种模式规则。如果Makefile可以在与.ext2
相同的路径上找到文件,则它允许您的Makefile自动创建所需的任何.ext
文件
%.c:%.o
是一种模式规则,用于从其等效的.c
文件(int\u array.o test\u int\u array.c)中获取.o
文件(int\u array.c test\u int\u array.o)
当您指定需要$(OBJS)
来构建test\u int\u数组
文件时,将调用此函数
模式规则会自动使用某些变量,例如$(CFLAGS)
,因此您无需手动将其添加到该规则中。您可以在模式规则中找到隐式使用的变量的完整列表:
你可以找到关于$@
,$的先决条件你指的是右侧指定的内容:
?是的-make
(以及makefiles
)是makefile
的一个syn。无需在这里为标签争吵:)@JonClements编辑顺序实际上是因为标签c
。标签c
是否适用于这个问题?@2501好的-在这里我觉得没什么用。。。所以,我不知道该怎么做……就像每个Unix命令一样,make
带有一个,你可以在那里找到你问题的答案。@sokkyoku我不能接受两个答案,两个都给了我很好的信息,这就是我为什么不接受的原因。如果我接受其中一个,而不是另一个,这对你们中的一个来说是不公平的……但事实上,我会接受你们的,因为你们有很高的声誉;)