我写了这个你好世界hello.c
:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
exit( 0 );
}
我Makefile
的是:
%: %.c
当我运行时,make
我会收到此错误:make: *** No targets. Stop.
您的 makefile 提供了一条规则 %: %.c
,指定它是您感兴趣的无扩展名可执行文件和.c文件(实际上,只有内置规则可以做到这一点),但没有提示存在名为 的源文件或hello.c
目标文件hello
。
当您自己键入时make
,make 将 makefile 中列出的第一个目标作为要创建的目标,但是您的 makefile 不包含任何目标,因此没有目标。停止。简而言之,make 不知道附近有什么名字像hello*
.
使用你的makefile,输入make hello
会做你想要的,因为它告诉make你想要构建什么。
如果你告诉 make about hello
,你也可以输入只是make
做你想做的事:
hello: hello.c
%: %.c
或者更惯用和灵活的方式,您可以在目标中列出所有“顶级”all
目标:
all: hello
%: %.c
.PHONY: all
典型的 c hello world 程序:
你好ç:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
典型的 Makefile,简短但完整:
生成文件:
all: hello
hello: hello.o
gcc -o "$@" hello.o
hello.o: hello.c
g++ -c hello.c
.PHONY:clean
clean:
rm *.o hello
带有模式规则的示例:
all: hello
hello: hello.o
gcc -o "$@" hello.o
%.o: %.c
gcc -c $<
.PHONY:clean
clean:
rm *.o hello
带分隔符的示例(\n
作为输入,\t
作为制表符):
all: hello\n
hello: hello.o\n
\tgcc -o "$@" hello.o
%.o: %.c\n
\tgcc -c $<
.PHONY:clean
clean:\n
\trm *.o hello