首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取Makefile的当前相对目录?

如何获取Makefile的当前相对目录?
EN

Stack Overflow用户
提问于 2013-08-09 06:02:21
回答 11查看 351.6K关注 0票数 249

我在应用程序的特定目录中有几个Makefile,如下所示:

代码语言:javascript
运行
复制
/project1/apps/app_typeA/Makefile
/project1/apps/app_typeB/Makefile
/project1/apps/app_typeC/Makefile

每个Makefile在上一级路径中都包含一个.inc文件:

代码语言:javascript
运行
复制
/project1/apps/app_rules.inc

在app_rules.inc中,我设置了构建时放置二进制文件的目标位置。我希望所有的二进制文件都在它们各自的app_type路径中:

代码语言:javascript
运行
复制
/project1/bin/app_typeA/

我尝试这样使用 $(CURDIR),:

代码语言:javascript
运行
复制
OUTPUT_PATH = /project1/bin/$(CURDIR)

但是,我将二进制文件隐藏在整个路径名中,如下所示:(注意冗余)

代码语言:javascript
运行
复制
/project1/bin/projects/users/bob/project1/apps/app_typeA

我可以做什么来获得执行的“当前目录”,这样我就可以知道app_typeX,以便将二进制文件放在它们各自的类型文件夹中?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-08-09 06:11:50

shell函数。

您可以使用shell函数:current_dir = $(shell pwd)。如果不需要绝对路径:current_dir = $(notdir $(shell pwd)),也可以将shellnotdir结合使用。

更新。

给定的解决方案仅在您从Makefile的当前目录运行make时有效。

正如@Flimm所说:

请注意,这将返回当前工作目录,而不是Makefile的父目录。

例如,如果运行cd /; make -f /home/username/project/Makefile,则current_dir变量将为/,而不是/home/username/project/

下面的代码将适用于从任何目录调用的Makefiles:

代码语言:javascript
运行
复制
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
票数 341
EN

Stack Overflow用户

发布于 2014-04-27 22:37:04

取自here

代码语言:javascript
运行
复制
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

显示为;

代码语言:javascript
运行
复制
$ cd /home/user/

$ make -f test/Makefile 
/home/user/test

$ cd test; make Makefile 
/home/user/test

希望这能有所帮助

票数 162
EN

Stack Overflow用户

发布于 2015-03-16 15:45:12

代码语言:javascript
运行
复制
THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18136918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档