我试图通过先进行预处理然后进行编译,然后组装然后进行链接,逐步将hello.c转换为hello。但是,仅执行我的makefile的第一个命令:
Osheens-MacBook-Air-1115:Assignment0.1 osheensachdev$ ls
hello.c makefile
Osheens-MacBook-Air-1115:Assignment0.1 osheensachdev$ cat makefile
hello.i : hello.c
gcc -E hello.c -o hello.i
hello.s : hello.i
gcc -S hello.i -o hello.s
hello.o : hello.s
gcc -c hello.s -o hello.o
hello : hello.o
$ld hello.o -e main hello
clean:
rm hello.i hello.s hello.o hello
Osheens-MacBook-Air-1115:Assignment0.1 osheensachdev$ make
gcc -E hello.c -o hello.i
Osheens-MacBook-Air-1115:Assignment0.1 osheensachdev$ make
make: `hello.i' is up to date.
我在网上搜索了有关链接文件的信息,但没有找到关于为何此文件不起作用的任何具体信息。
我还指定了target: [dependancies]
,所以我不明白为什么这不起作用。
Makefile的第一个目标是默认目标。
这就是为什么您在许多Makefile的顶部看到一个all
目标,该目标旨在“制作所有东西”:
all: build test
build: <prerequisites>
test: <prerequisites>
由于没有指定一个,所以Make仅运行hello.i
(加上构建此目标所需的一切):
hello.i
尚不存在。hello.i
需要hello.c
。首先设置hello.c
。hello.c
已被“制造”。没事。hello.i
,即运行gcc -E hello.c -o hello.i
。然后您再次运行Make(没有任何特定目标)
hello.i
已经存在。没事。我怀疑您想制作“ hello”,即您的程序。
任一:
make hello