执行make时如何自动生成目标文件目录
2024-06-27
37
概述
在执行make时,如果我们把目标文件objects输出到一个集中的目录,而一个干净的工程(比如刚从git克隆下来的),这个目录可能是不存在的,此时执行make就会报错“Fatal error: can’t create xxx/xxx/xxx.o: No such file or directory”,makefile中可以有两种方法来自动创建这个目录,避免编译报错。
通过目标文件添加依赖
在makefile中给目标文件增加依赖,在依赖中执行mkdir命令来创建目标文件的目录,参考makefile的写法如下:
OBJDIR = obj
MODULES := src src2
...
OBJDIRS := $(patsubst %, $(OBJDIR)/%, $(MODULES))
build: $(OBJDIRS)
echo $^
$(OBJDIRS):
mkdir -p $@
通过嵌入shell命令
通过在makefile中定义个DUMMY变量,该变量中嵌入shell命令来实现,参考makefile如下:
SOURCES:=$(shell find $(SRC)/ -type f -name *.c) #Get all the c files
#Get the files theyre gonna be compiled to
OBJECTS:=$(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES))
#Get just the paths so you can create them in advance
OBJDIRS:=$(dir $(OBJECTS))
#call mkdir with the directories (using a dummy var because too much
#trouble to deal with priorities) someone could prob do better
#--parents ignores the repeated and already existing errors
DUMMY:=$(shell mkdir --parents $(OBJDIRS))
更新于:2个月前赞一波!2
相关文章
- hosts 域名映射文件
- uniapp 目录结构及开发规范
- .gitignore 忽略文件和目录
- TP6.0 自定义命令创建类文件
- Linux sed命令关键字匹配文件中整行的任意字符然后替换整行
- vscode中自动将json格式的内容自动生成对应的代码
- apache 简介、资源网站、目录结构
- Vue 创建项目及目录介绍
- TP6.0 命令行生成类库文件
- ThinkPHP6.0 扩展类库目录(extend)
- Laravel 路由定义文件
- PHP 创建目录函数封装
- Linux 删除文件或目录 rm 命令
- ThinkPHP6.0 公共函数文件
- ThinkPHP6.0自定义异常页面模板文件
- zblog问答聚合采集插件,双标题,目录,问答聚合,自动推送
- SVN文件冲突解决方案(手动解决)
- 如何在 Python 中读取 .data 文件?
- 在C#中通过Windows API读写INI文件的简单实现代码
- 如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
文章评论
全部评论