代码之家  ›  专栏  ›  技术社区  ›  BENG

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

  •  0
  • BENG  · 技术社区  · 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
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   MadScientist    1 年前

    首先,要注意GNU make的通配符函数对 ** 一些shell的操作方式。使用 $(wildcard src/**/*.cpp) 在行为上与使用相同 $(wildcard src/*/*.cpp) ;“匹配零个或多个字符”之间没有区别( * )和“匹配零个或多个字符后接零个或更多个字符”( ** ).

    其次,有很多GNUMake函数可以使用文件名;它们都显示出来了 in the manual .

    您可以使用:

    NAMES := $(patsubst %.cpp,%,$(notdir $(SOURCES)))