为什么不在makefile中执行简单的行

时间:2015-10-29 16:17:20

标签: makefile

这是我第一次使用make,而且我一直在试图解决问题。我无法理解为什么简单的回声永远不会被执行:

CFLAGS = -Wall 
LDFLAGS = -g
CC = gcc
SRCS = p4a.c p4b.c

p4static:   p4a.c
    gcc $(LDFLAGS) -o $@ $< -static -L. -lpthread


p4dynlink:  p4a.c
    @echo "this doesn't print/echo/execute"
    gcc $(LDFLAGS) -o p4dynlink $< -L. -lpthread

我正在使用制表符而不是空格。这是输出:

mike@elementary:~/p4$ make
gcc -g -o p4static p4a.c -static -L. -lpthread
mike@elementary:~/p4$ make
make: `p4static' is up to date.

1 个答案:

答案 0 :(得分:1)

来自How make Processes a Makefile

  

默认情况下,make从第一个目标开始(而不是名称以“。”开头的目标)。这称为默认目标。 [....]

     

因此,当您提供命令时:

make
     

make读取当前目录中的makefile,然后处理第一个规则。

因此,当您键入make时,请尝试构建没有p4static行的echo目标。下次运行make时,它表示目标是最新的,无关。

要构建p4dynlink,您需要告诉make构建目标make p4dynlink

您可以使用.DEFAULT_GOAL手动设置默认目标(在makefile中):

# Set our own.
.DEFAULT_GOAL := foo

但惯例通常是创建一个all目标作为第一个目标,并默认为“做正确的事”。

因此,在您的情况下,假设您希望默认构建两个目标,您将使用:

all: p4static p4dynlink