GNU make 是否将 .c 文件隐式编译为 .o 文件?
Does GNU make implicitly compile .c files to .o files?
菜鸟问题。我想用目标文件 foo.o 将 bar.c 编译为可执行文件 bar.
我在 Makefile 中有这个:
bar: foo.o
cc bar.c foo.o -o bar
我运行 $ make -n
得到:
cc -c -o foo.o foo.c
cc bar.c foo.o -o bar
我正在查看输出的第一行 cc -c -o foo.o foo.c
。我没有编写明确的规则将 foo.c 编译为 foo.o。 make
是否在看到 .o 目标时隐式执行此操作?
是的,GNU make 有 catalog 条 built-in 条规则:
Compiling C programs
n.o is made automatically from n.c with a recipe of the form ‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’.
Linking a single object file
n is made automatically from n.o by running the linker (usually called ld) via the C compiler. The precise recipe used is ‘$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)’.
所以你可以写:
bar: bar.o foo.o
菜鸟问题。我想用目标文件 foo.o 将 bar.c 编译为可执行文件 bar. 我在 Makefile 中有这个:
bar: foo.o
cc bar.c foo.o -o bar
我运行 $ make -n
得到:
cc -c -o foo.o foo.c
cc bar.c foo.o -o bar
我正在查看输出的第一行 cc -c -o foo.o foo.c
。我没有编写明确的规则将 foo.c 编译为 foo.o。 make
是否在看到 .o 目标时隐式执行此操作?
是的,GNU make 有 catalog 条 built-in 条规则:
Compiling C programs
n.o is made automatically from n.c with a recipe of the form ‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’.
Linking a single object file
n is made automatically from n.o by running the linker (usually called ld) via the C compiler. The precise recipe used is ‘$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)’.
所以你可以写:
bar: bar.o foo.o