0

我写了这个你好世界hello.c

#include <stdio.h>

int main() {
  printf("Hello, World!\n");
  exit( 0 );
}

Makefile的是:

%: %.c

当我运行时,make我会收到此错误:make: *** No targets. Stop.

4

2 回答 2

5

您的 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
于 2013-09-09T10:16:02.817 回答
1

典型的 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
于 2013-09-09T06:50:15.720 回答