Makefile不处理所有命令

问题描述 投票:0回答:1

我试图通过先进行预处理然后进行编译,然后组装然后进行链接,逐步将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 gnu-make gnu
1个回答
0
投票

Makefile的第一个目标是默认目标。

这就是为什么您在许多Makefile的顶部看到一个all目标,该目标旨在“制作所有东西”:

all: build test

build: <prerequisites>

test: <prerequisites>

由于没有指定一个,所以Make仅运行hello.i(加上构建此目标所需的一切):

  1. hello.i尚不存在。
  2. [hello.i需要hello.c。首先设置hello.c
  3. hello.c已被“制造”。没事。
  4. 现在创建hello.i,即运行gcc -E hello.c -o hello.i
  5. 停止

然后您再次运行Make(没有任何特定目标)

  1. hello.i已经存在。没事。
  2. 停止

我怀疑您想制作“ hello”,即您的程序。

任一:

  1. 将顶部的“ hello”移动为默认目标
  2. 或运行make hello
© www.soinside.com 2019 - 2024. All rights reserved.