Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这些对象文件是如何在Makefile中编译的?_Makefile - Fatal编程技术网

这些对象文件是如何在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”一书中的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

有人能解释一下吗?

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) $<
…