如何将可执行文件放在文件夹下?

时间:2016-09-09 05:03:25

标签: makefile

我原来的目录结构是:

  

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文件夹中?

1 个答案:

答案 0 :(得分:2)

bin/mapreduce: mapreduce | bin

该规则不正确。在bin运行之前,您需要创建mapreduce。但是这条规则没有达到那个顺序。以下是一些选项:

  • 将仅限订单的先决条件放在mapreduce目标上:

    mapreduce: | bin
    
  • 将仅限订单的先决条件放在$(BINS)目标上:

    $(BINS) : | bin