这是我第一次使用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.
答案 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