我makefile使用wildcard获取路径下的所有文件名,但是获取的文件名都带有路径信息,如何获取不带路径信息,比如用basename?
时间: 2024-04-15 16:28:05 浏览: 55
如果你想要使用`basename`获取不带路径信息的文件名,你可以在makefile中使用`$(basename)`函数来实现。下面是一个示例:
```makefile
SOURCES := $(wildcard src/*.c)
BASENAMES := $(notdir $(basename $(SOURCES)))
all: $(BASENAMES)
$(BASENAMES): %:
gcc -o $@ src/$@.c
clean:
rm -rf $(BASENAMES)
```
在上面的示例中,`$(notdir)`函数用于获取不带路径的文件名,`$(basename)`函数用于获取不带路径和扩展名的文件名。通过将这两个函数组合使用,我们可以得到不带路径信息的文件名,并将其用作目标。在此示例中,每个文件名都会与对应的`.c`文件进行编译,并生成可执行文件。最后,可以使用`clean`目标来清除生成的可执行文件。
请注意,这里假设所有的`.c`文件都位于`src/`目录下,并且每个`.c`文件对应的目标可执行文件名称与其文件名相同(不包括路径和扩展名)。你可以根据实际情况进行相应的调整。
相关问题
我makefile使用wildcard获取路径下的所有文件名,但是获取的文件名都带有路径信息,如何获取不带路径信息
你可以使用makefile中的字符串操作函数来获取不带路径信息的文件名。可以使用`$(notdir)`函数来实现这一目的。下面是一个示例:
```makefile
SOURCES := $(wildcard src/*.c)
OBJECTS := $(patsubst src/%.c,obj/%.o,$(SOURCES))
TARGET := myprogram
$(TARGET): $(OBJECTS)
gcc -o $@ $^
obj/%.o: src/%.c
gcc -c -o $@ $<
clean:
rm -rf $(OBJECTS) $(TARGET)
```
在上面的示例中,`$(notdir)`函数用于从`$(SOURCES)`变量中获取不带路径的文件名。在此之后,你可以将这些文件名用于其他需要的操作,例如编译或链接等。
makefile文件wildcard
在 Makefile 文件中,`wildcard` 是一个函数,用于匹配文件名模式。它可以用来获取指定目录下符合特定模式的文件列表。以下是 `wildcard` 函数的使用示例:
```makefile
# 获取当前目录下所有的.c文件
C_FILES := $(wildcard *.c)
# 获取src目录下所有的.c和.cpp文件
SRC_FILES := $(wildcard src/*.c src/*.cpp)
# 打印文件列表
print_files:
@echo "C Files: $(C_FILES)"
@echo "Source Files: $(SRC_FILES)"
```
在上述示例中,`wildcard` 函数会返回符合特定模式的文件列表,并将其赋值给变量 `C_FILES` 和 `SRC_FILES`。然后,在 `print_files` 目标中,我们可以使用这些变量来打印文件列表。
假设当前目录下有三个.c文件,分别为 `main.c`、`utils.c` 和 `config.c`,那么在运行 `make print_files` 命令后,将会输出以下内容:
```
C Files: main.c utils.c config.c
Source Files: src/file1.c src/file2.cpp
```
希望这个示例对你有帮助!如果你有更多关于 Makefile 的问题,请随时提问。
阅读全文