我有一个没有创建的目标,但它的直接依赖性确实如此。并且没有错误消息。
这是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
答案 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
,也许这就是你在其他地方工作过的那些?