这些对象文件是如何在Makefile中编译的?
我不知道是否有任何方法可以隐式编译对象文件。这是“艰苦学习C”一书中的Makefile 我没有看到任何一行将这些对象文件是如何在Makefile中编译的?,makefile,Makefile,我不知道是否有任何方法可以隐式编译对象文件。这是“艰苦学习C”一书中的Makefile 我没有看到任何一行将.c文件编译成.o文件。但当我运行make时,结果如下: cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG -fPIC -c -o src/lcthw/list.o src/lcthw/list.c ar rcs build/liblcthw.a src/lcthw/list.o ranlib build/liblcthw.a 有人能解释一
.c
文件编译成.o
文件。但当我运行make时,结果如下:
cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG -fPIC -c -o src/lcthw/list.o src/lcthw/list.c
ar rcs build/liblcthw.a src/lcthw/list.o
ranlib build/liblcthw.a
有人能解释一下吗?Make知道如何将
.c
文件编译成相应的.o
文件-这是一个内置规则。语言也是如此。它还知道如何从单个源文件构建程序。等等
您可以使用make-p-f/dev/null
查看make
定义的所有内置规则和默认宏。我从GNU Make 3.81获得的部分输出是:
…
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
…
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
…
%: %.c
# commands to execute (built-in):
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
…
%.o: %.c
# commands to execute (built-in):
$(COMPILE.c) $(OUTPUT_OPTION) $<
…
…
LINK.c=$(CC)$(CFLAGS)$(CPPFLAGS)$(LDFLAGS)$(TARGET_ARCH)
…
COMPILE.c=$(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-c
…
%:%c
#要执行的命令(内置):
$(LINK.c)$^$(LOADLIBES)$(LDLIBS)-o$@
…
%.o:%.c
#要执行的命令(内置):
$(COMPILE.c)$(输出选项)$<
…
…
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
…
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
…
%: %.c
# commands to execute (built-in):
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
…
%.o: %.c
# commands to execute (built-in):
$(COMPILE.c) $(OUTPUT_OPTION) $<
…