makefile当前目录名
时间: 2023-08-10 15:06:51 浏览: 255
根据引用[1]和引用[2]中的内容,可以使用以下方法获取Makefile当前目录名:
1. 使用MAKEFILE_LIST变量和shell命令来获取当前正在执行的Makefile的完整路径名,并通过dirname命令去掉Makefile部分,最后再次使用dirname命令获取其父目录。这样可以得到当前Makefile的目录名。
2. 使用abspath函数和lastword函数获取当前正在执行的Makefile的绝对路径名,然后使用dir函数获取其所在的目录名。
请注意,以上方法都是在Makefile中使用的,可以根据具体情况选择其中一种方法来获取当前Makefile的目录名。
相关问题
makefile包含当前文件夹下头文件目录 规则
在 Makefile 中,可以通过设置变量来包含当前文件夹下的头文件目录。具体的规则如下:
1. 定义头文件搜索路径变量:可以使用变量来存储头文件搜索路径,比如:
```
INCDIR = -I./include
```
这样就定义了一个名为 INCDIR 的变量,表示头文件搜索路径为当前文件夹下的 include 目录。
2. 在编译命令中添加头文件搜索路径:可以在编译命令中使用上述定义的变量来添加头文件搜索路径,比如:
```
gcc -c $(INCDIR) main.c -o main.o
```
这样就会将当前文件夹下的 include 目录添加到头文件搜索路径中。
3. 自动化变量 $< 和 $@:为了避免重复输入文件名,可以使用自动化变量 $< 和 $@ 来代表当前正在编译的源文件和目标文件,比如:
```
%.o: %.c
gcc -c $(INCDIR) $< -o $@
```
这样就会自动将当前文件夹下的 include 目录添加到头文件搜索路径中,编译当前源文件并生成对应的目标文件。
以上就是在 Makefile 中包含当前文件夹下头文件目录的规则。
多目录makefile怎么写
对于多目录的情况,我们可以使用一个主makefile来管理整个项目,然后在每个子目录下再编写各自的makefile。以下是一个示例:
首先,我们创建一个名为`Makefile`的主makefile,并在其中定义一些变量和规则:
```makefile
# 定义子目录
SUBDIRS := dir1 dir2 dir3
# 定义编译器和编译选项
CC := gcc
CFLAGS := -Wall -Werror
# 定义目标文件存放的目录
OBJDIR := obj
# 定义目标文件和可执行文件
TARGET := myprogram
OBJS := $(addprefix $(OBJDIR)/, file1.o file2.o file3.o)
.PHONY: all clean $(SUBDIRS)
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
# 在每个子目录下执行make命令
$(SUBDIRS):
$(MAKE) -C $@
# 生成目标文件的规则
$(OBJDIR)/%.o: %.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
# 创建目标文件存放的目录
$(OBJDIR):
mkdir -p $@
clean:
rm -rf $(TARGET) $(OBJDIR)
```
然后,在每个子目录下创建各自的makefile,例如`dir1/Makefile`:
```makefile
# 定义当前子目录下的源文件
SRCS := file1.c
# 生成当前子目录下的目标文件
OBJS := $(addprefix $(OBJDIR)/, $(SRCS:.c=.o))
all: $(OBJS)
$(OBJS): $(SRCS) | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR):
mkdir -p $@
clean:
rm -rf $(OBJS)
```
其他子目录的`Makefile`可以类似地创建。
这样,通过在主makefile中定义需要编译的子目录,并在其中执行各自的make命令,可以实现多目录的编译。同时,每个子目录下的makefile会将编译生成的目标文件放入统一的目标文件存放目录中。
使用`make`命令执行主makefile即可开始编译整个项目。使用`make clean`命令可以清除编译生成的目标文件和可执行文件。
阅读全文