繁体   English   中英

如何获取GNU make中makefile的父目录的基本名称?

How to get the basename of the parent directory of a makefile in GNU make?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设您想要一个生成文件,该文件将生成一个以父目录命名的文件。 一种方法是硬编码目标名称,但这不是很“通用”,例如

TARGET := dirname.pdf

$(TARGET): $(TARGET:.pdf=.tex)
    pdflatex $(@:.pdf=.tex)

通过make函数检索目录名会更好。 关于SA如何检索Makefile的完整路径(例如https://stackoverflow.com/a/18137056/1905491 )的完整问题(和答案),但没有父目录的名称...

在GNU make中,最有效,最便携的方法是什么?

4 个回复

为什么不只使用内置文件名功能呢?

TARGET := $(notdir $(CURDIR))

我想我不确定您所说的“父目录”是什么意思; 这有点模棱两可。 带有路径名和所需结果的特定示例将使其更易于理解。

它在很大程度上取决于“父”目录的含义。 毕竟,make只能对字符串进行操作,就数据类型而言,没有目录和文件的真实概念。 您可以例如通过调用以下函数来提取路径的姓氏:

parent_name = $(lastword $(subst /, ,$(dir $(abspath $1))))
$(info $(call parent_name,/home/stefanct/myproject/foo.c))

输出:

myproject

如果您的GNU make> 4.0具有guile支持( $(info .FEATURES)输出包含guile并且基本名称不包含空格,则以下解决方案可以在没有任何外部依赖项或子流程的情况下工作:

MAKEFILE_PATH:=$(abspath $(lastword $(MAKEFILE_LIST)))
MAKEFILE_PATH_ELEMS:=$(subst /, ,$(MAKEFILE_PATH))
PARENT_DIR:=$(word $(guile (- $(words $(MAKEFILE_PATH_ELEMS)) 1)),$(MAKEFILE_PATH_ELEMS))

不幸的是,(所有/很多?)发行版默认不启用guile支持,因此需要安装一个独特的软件包(例如,Ubuntu上的make-guile )来提供guile支持并替换普通的make

如果通过父目录,则表示:

Makefile路径:

/some/file/path/Makefile

Makefile目录:

/some/file/path

父目录(Makefile的)

/some/file

然后,下面的简单代码可能就是您要查找的内容:

 MK_PATH:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
 MK_PARENT:=$(realpath $(MK_PATH)../)
1 如何在 CMake 或 make 之外获取 GNU 安装目录的名称?

我正在使用 CMake 安装 GNUInstallDirs 定义的软件,而 GNUInstallDirs 又应该遵循这些标准。 事实证明,这些在发行版中并不完全一致 - libdir在 ubuntu 下变成lib而在 alpine 下它解析为lib64 。 我需要以可移植的方式在 CMake 之 ...

4 在Makefile.msc中获取父目录

我在源(zlib \\ win32)的子目录中有第三方Makefile.msc(zlib)。 看来您应该直接从源目录运行win32 / Makefile.msc。 但是,我需要制作多个不同的版本,并希望将结果分开。 我还想从源目录以外的目录中调用nmake。 我试过SRCDIR = ...

2012-12-20 19:38:35 0 409   c/ nmake
6 在Python中获取目录的基本名称的优雅方法?

我有几个脚本将目录名作为输入,我的程序在这些目录中创建文件。 有时我想获取给程序的目录的基本名称,并使用它在目录中创建各种文件。 例如, 问题是如果用户给出带有斜杠的目录名,那么os.path.basename将返回空字符串,这不是我想要的。 在python中处理这些斜杠/尾部斜杠 ...

7 替代GNU的makefile中的二次扩展make 3.79.1

我一直在研究一个使用二次扩展的makefile,不知道这个特性只存在于GNU make版本3.81之后。 不幸的是,这里有一些旧机器只安装了3.79.1,当然,在这些机器上,makefile不起作用。 是否有二次扩张的替代方案? 我使用它的C ++程序的规则如下所示: 我知道 ...

9 PHP获取目录中文件的基本名称

我想创建一个指向特定目录中所有文件的链接。 例 我想让PHP生成: 最好仅创建.txt文件的链接。 我有以下代码: 但是它给出了这个错误: 即使它可以工作,它甚至可以显示不具有.txt扩展名的文件。 (我知道可以通过更改某些php设置或更改某些权限来解决 ...

2013-07-05 08:30:48 4 671   php
10 php代码获取目录的先前基本名称

请我需要获取文件夹的先前基本名称,我使用此代码来使其工作,但仍然没有得到我想要的东西。 下面是我的链接的样子。 http://www.example.net/cjl/PhpLoginPage/images/ 我的输出将是这样 /cjl/PhpLoginPag 现 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM