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

Makefile 如何将可执行文件放在文件夹下?,makefile,Makefile,我原来的目录结构是: 包括/(常数h,映射h) src/(main.c,map_reduce.c) 生成文件 如果没有人,我想创建一个bin文件夹 然后,将main.c编译成可执行的mapreduce文件并将其放入bin文件夹 但是,对于bin/$@,如果在$@之前添加bin/则会显示错误: /usr/bin/ld:无法打开输出文件bin/mapreduce:没有此类文件或 目录 collect2:错误:ld返回了1个退出状态 Makefile:19:目标“mapreduce”的配方失败 mak

我原来的目录结构是:

包括/(常数h,映射h)

src/(main.c,map_reduce.c)

生成文件

如果没有人,我想创建一个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文件夹

bin/mapreduce: mapreduce | bin
这条规则是不正确的。在运行
mapreduce
之前,需要创建
bin
。但这一规则并没有实现排序。以下是一些选项:

  • 将订单专用先决条件置于
    mapreduce
    目标上:

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

    mapreduce: | bin
    
    $(BINS) : | bin
    
这条规则是不正确的。在运行
mapreduce
之前,需要创建
bin
。但这一规则并没有实现排序。以下是一些选项:

  • 将订单专用先决条件置于
    mapreduce
    目标上:

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

    mapreduce: | bin
    
    $(BINS) : | bin
    

您可以将cd放入mapreduce目标中的bin/中,从而在bin/目录中编译源代码。您可以将cd放入mapreduce目标中的bin/中,从而在bin/目录中编译源代码