gcc - 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
,点点表示上一个目录。这就是它想要达到的目的吗?
解决方案
您的 makefile 缺少创建BINDIR
目录的规则 - 如果它不存在,您的链接行将无法将生成的二进制文件放在那里!像这样的规则应该这样做:
$(BINDIR):
mkdir -p $(BINDIR)
只需确保任何其他规则(如您问题中的规则)也依赖于此目录!
推荐阅读
- postgresql - PostgreSQL 什么时候自动为表创建位图索引?
- scala - spark:在被销毁后尝试使用广播
- html - css / html中z轴上的父级高于子级
- angular - 获取请求不从离子框架返回值
- javascript - array.length 可以信任吗?
- javascript - 为什么重定向页面加载在同一浏览器窗口中的当前页面之上?
- java - 使用函数的结果作为新函数的参数,但为什么会出现异常?
- vb.net - 在 Microsoft Access 数据库中插入当前日期?
- r - 在循环中同时使用子集和整个数据帧
- node.js - Node/React App 返回“SyntaxError: Unexpected token import”错误