首页 > 解决方案 > gcc - ../(点点斜杠)在 Makefile 的变量中是什么意思?

问题描述

我已经搜索了几个小时来寻找答案。我是 gcc 和 Makefile 的新手。

我在一些源代码中有一个 Makefile,如下所示:

CC=gcc
SRCDIR=src
BINDIR=../bin
CFLAGS= -flag
LIBS= -lthing
...
$(BINDIR)/program_name: $(SRCDIR)/program_name.c
    $(CC) $(CFLAGS) $(SRCDIR)/program_name.c -o $(BINDIR)/program_name $(LIBS)

我明白这一切意味着什么,除了 ../ inBINDIR是什么意思。当我制作 Makefile 时,我收到错误消息:

/usr/bin/ld: cannot open output file ../bin/program_name: No such file or directory
collect2: error: ld returned 1 exit status
Makefile:20: recipe for target '../bin/program_name' failed
make: *** [../bin/program_name] Error 1

我的猜测是这个 Makefile 的原作者意味着 bin 文件夹应该放在 Makefile 所在的父目录中。我知道在使用 Linux CLI 命令时cd,点点表示上一个目录。这就是它想要达到的目的吗?

标签: gccmakefile

解决方案


您的 makefile 缺少创建BINDIR目录的规则 - 如果它不存在,您的链接行将无法将生成的二进制文件放在那里!像这样的规则应该这样做:

$(BINDIR): 
    mkdir -p $(BINDIR)

只需确保任何其他规则(如您问题中的规则)也依赖于此目录!


推荐阅读