目标不知何故没有被创建

Target somehow doesn't get created

我有一个没有创建的目标,但它是直接依赖项。而且没有错误信息。

这是生成文件:

PREFIX?=/home/jenia/learn-c-the-hard-way
CFLAGS=-g -Wall -I${PREFIX}/lib/include
LDFLAGS=-L${PREFIX}/lib
INSTALL_DIR=/home/jenia/learn-c-the-hard-way/apps

all: set-manipulation
set-manipulation: main.o

install: all
    install -d $(INSTALL_DIR)/set-manipulation
    install set-manipulation $(INSTALL_DIR)/set-manipulation

clean:
    rm -f *.o
    rm -f set-manipulation
    rm -rf *.dSYM

我得到的是 main.o 文件,而不是 set-manipulation 文件,它是程序的名称。

就像在更大的程序中一样,我想先创建目标文件,然后再创建程序。喜欢

all: my-amazing-prog

my-amazing-prog: A.o B.o C.o D.o

...

然后以文件结束:

A.o, 
B.o, 
C.o, 
D.o, 
my-amazing-prog

所以我不明白为什么在这种情况下我在创建 object.o 文件和依赖于它们的程序时遇到麻烦。

P.S.

以防万一,目录结构如下:

  /home/jenia/learn-c-the-hard-way/lib:
  drwxr-xr-x  2 jenia jenia 4096 Nov  1 12:47 include
  -rwxr-xr-x  1 jenia jenia 6804 Nov  1 12:47 set_theory.a -- 50
  -rwxr-xr-x  1 jenia jenia 9664 Nov  1 12:47 set_theory.so -- 11


  /home/jenia/learn-c-the-hard-way/lib/include:
  -rw-r--r--  1 jenia jenia   85 Nov  1 12:47 bag.h -- 3
  -rw-r--r--  1 jenia jenia   64 Nov  1 12:47 new.h -- 2
  -rw-r--r--  1 jenia jenia   92 Nov  1 12:47 object.h -- 3
  -rw-r--r--  1 jenia jenia  318 Nov  1 12:47 set.h -- 16

您需要一条规则告诉 make 如何从 main.o 创建 set-manipulation。这部分:

set-manipulation: main.o

只指定依赖关系,不指定命令。使用,例如

set-manipulation: main.o
      $(CC) -o "$@" main.o

我很确定如果

my-amazing-prog: A.o B.o C.o D.o

does create my-amazing-prog you do 有一些与之相关的命令。 Make 有一些内置规则可以从单个源文件 prog.c 创建程序 prog,也许这就是您在其他地方看到的工作方式?