C 目标公司不知何故没有';不要被创造
我有一个目标,它没有得到创建,但它的直接依赖关系得到创建。并且没有错误消息 以下是生成文件:C 目标公司不知何故没有';不要被创造,c,gcc,makefile,gnu,C,Gcc,Makefile,Gnu,我有一个目标,它没有得到创建,但它的直接依赖关系得到创建。并且没有错误消息 以下是生成文件: 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
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时会遇到麻烦
附言
以防万一,以下是目录结构:
/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操纵。本部分:
set-manipulation: main.o
仅指定依赖项,但不指定命令。使用,例如
set-manipulation: main.o
$(CC) -o "$@" main.o
我很确定如果
my-amazing-prog: A.o B.o C.o D.o
确实创建了my Azing prog
您确实有一些与之相关的命令。Make有一些内置规则,可以从单个源文件prog.c
创建程序prog
,也许这就是您在其他地方看到的工作情况?您需要一个规则,告诉Make如何从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 Azing prog
您确实有一些与之相关的命令。Make有一些内置规则,可以从单个源文件prog.c
创建程序prog
,也许这就是您在其他地方看到的工作情况?您发布的Make文件不完整,因为没有创建main.o
的规则。请发布@m.s.:从源文件(如main.c
)创建main.o
通常不需要明确的规则。当然,如果目录列表显示存在main.c
,则更具说服力,但这是另一个问题。您发布的Makefile不完整,因为没有创建main.o
的规则。请发布@m.s.:从源文件(如main.c
)创建main.o
通常不需要明确的规则。当然,如果目录列表显示存在main.c
,这会更有说服力,但这是另一个问题。谢谢。我更改了makefile如下:set manipulation:main.o$(CC)$(LDFLAGS)$(CFLAGS)-o“$@”main.o
,但现在链接器找不到头或库。下面是一个示例:main.o:In function main':/home/jenia/learn-c-the-hard-way/objects-oriented-c/set-manipulations/main.c:9:set'
的未定义引用之前,没有出现此错误。我编辑了该问题以添加libs和头文件的文件结构,这是编译器在错误消息之前输出的内容:cc-g-Wall-I/home/jenia/learn-c-the-hard-way/lib/include-c-o main.c cc-L/home/jenia/learn-c-the-hard-way/lib-g-Wall-I/home/jenia/learn-c-the-hard-way/lib/include-o“set-manipulation”main.o
@JeniaIvanov,无法工作;如果链接,则不能使用-c
(仅编译)选项。链接或编译。谢谢。我更改了makefile如下:set manipulation:main.o$(CC)$(LDFLAGS)$(CFLAGS)-o“$@”main.o
,但现在链接器找不到头或库。下面是一个示例:main.o:In function main':/home/jenia/learn-c-the-hard-way/objects-oriented-c/set-manipulations/main.c:9:set'
的未定义引用之前,没有出现此错误。我编辑了该问题以添加libs和头文件的文件结构,这是编译器在错误消息之前输出的内容:cc-g-Wall-I/home/jenia/learn-c-the-hard-way/lib/include-c-o main.c cc-L/home/jenia/learn-c-the-hard-way/lib-g-Wall-I/home/jenia/learn-c-the-hard-way/lib/include-o“set-manipulation”main.o
@JeniaIvanov,无法工作;如果链接,则不能使用-c
(仅编译)选项。链接或编译。