Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要Makefile中目标的特定顺序_Makefile - Fatal编程技术网

需要Makefile中目标的特定顺序

需要Makefile中目标的特定顺序,makefile,Makefile,我有一个问题,首先,我将向您展示我的makefile: CC = gcc CFLAGS = -Wall -c all: tarea1 libdisplay.a tarea1: tarea1.o operations.o -ldisplay -lmatrix $(CC) -o $@ $^ tarea1.o: tarea1.c $(CC) $(CFLAGS) $^ operations.o: operations.c $(CC) $(CFLAGS) $^

我有一个问题,首先,我将向您展示我的makefile:

CC      = gcc 
CFLAGS  = -Wall -c

all: tarea1 libdisplay.a

tarea1: tarea1.o operations.o -ldisplay -lmatrix
    $(CC) -o $@ $^

tarea1.o: tarea1.c
    $(CC) $(CFLAGS) $^

operations.o: operations.c
    $(CC) $(CFLAGS) $^

libdisplay.a: display.o
    ar -rcs $@ $^ 

display.o: display.c
    $(CC) $(CFLAGS) $^
tarea1是我的程序,这个目标需要操作。o,它使用教授给出的libmatrix.a,但是库libdisplay.a需要为我制作,这里是我遇到问题的地方,当我运行makefile时,它说:

make: *** No rule to make target `-ldisplay', needed by `tarea1'.  Stop.

我知道出现此消息是因为它试图在libdisplay.a之前执行tarea1,所以我的问题是如何明确地说目标libdisplay.a需要在tarea1之前执行?

-ldisplay
是链接器参数,而不是makefile依赖项


您希望
libdisplay.a
位于
tarea1:…
行的右侧,告诉make需要首先创建该文件。

这不是该消息的意思。该消息来自make,而不是编译器。再看一遍。这意味着make不知道如何使用该名称构建目标。更多细节见我的答案。