我原来的目录结构是:
include /(const.h,map_reduce.h)
src /(main.c,map_reduce.c)
生成文件
CFLAGS = -Wall -Werror
BINS = bin_mapreduce
all: $(BINS)
bin_mapreduce: bin/mapreduce
bin/mapreduce: mapreduce | bin
mapreduce:
gcc $(CFLAGS) src/main.c -o bin/$@
bin:
mkdir $@
clean:
rm -f bin/mapreduce
clean:
rm -f bin/mapreduce
如果没有人,我想创建一个bin文件夹。
然后,将main.c编译为可执行的mapreduce文件,并将其放入bin文件夹。
但是,对于bin / $ @,如果我在$ @之前添加bin /,则会显示错误:
/ usr / bin / ld:无法打开输出文件bin / mapreduce:没有这样的文件或 目录
collect2:错误:ld返回1退出状态
Makefile:19:目标'mapreduce'的配方失败
make:*** [mapreduce]错误1
如果没有bin /,只需:
gcc $(CFLAGS) src/main.c -o $@
如果在bin文件夹外创建mapreduce文件,则会创建bin文件夹。
如何将mapreduce文件放在bin文件夹中?
答案 0 :(得分:2)
bin/mapreduce: mapreduce | bin
该规则不正确。在bin
运行之前,您需要创建mapreduce
。但是这条规则没有达到那个顺序。以下是一些选项:
将仅限订单的先决条件放在mapreduce
目标上:
mapreduce: | bin
将仅限订单的先决条件放在$(BINS)
目标上:
$(BINS) : | bin