Makefile:在不知道路径的情况下获取列表中的文件名

问题描述 投票:0回答:1

我有一组目录中的源列表

SOURCES = $(wildcard src/**/*.cpp)

举例来说,我们有一个这样的目录

src
|- dir_one
|  |- file_one.cpp
|  `- file_two.cpp
|
|- dir_two
|  |- file_three.cpp
|  `- file_four.cpp
|
`- dir_three
   `-file_five.cpp

那么

$(SOURCES)
等于

src/dir_one/file_one.cpp
src/dir_one/file_two.cpp
src/dir_two/file_three.cpp
src/dir_two/file_four.cpp
src/dir_three/file_five.cpp

我想使用 Makefile 函数来获取仅包含文件名称的列表,但我不知道有哪些目录。例如我想要得到

NAMES = <some makefile functions>

所以 $(NAMES) 等于

file_one file_two file_three file_four file_five
makefile gnu-make
1个回答
0
投票

首先,请注意 GNU make 的通配符函数对于

**
并不像某些 shell 那样具有任何特殊含义。使用
$(wildcard src/**/*.cpp)
的行为与使用
$(wildcard src/*/*.cpp)
相同; “匹配零个或多个字符”(
*
) 和“匹配零个或多个字符后跟零个或多个字符”(
**
) 之间没有区别。

其次,有很多 GNU Make 函数可以处理文件名;它们都显示在手册中

您可以使用:

NAMES := $(patsubst %.cpp,%,$(notdir $(SOURCES)))
© www.soinside.com 2019 - 2024. All rights reserved.