目标以某种方式不会被创建

时间:2015-11-01 18:15:59

标签: c gcc makefile gnu

我有一个没有创建的目标,但它的直接依赖性确实如此。并且没有错误消息。

这是makefile:

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文件,然后创建依赖于它们的prgram。

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

1 个答案:

答案 0 :(得分:4)

您需要一条规则来说明如何从set-manipulation创建main.o。这部分:

set-manipulation: main.o

仅指定依赖项,但不指定命令。使用,例如

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

我很确定如果

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

确实创建my-amazing-prog 有一些与之关联的命令。 Make有一些内置规则可以从单个源文件prog创建一个程序prog.c,也许这就是你在其他地方工作过的那些?