makefile %_
时间: 2024-06-17 08:05:53 浏览: 19
在Makefile中,%_表示通配符,可以匹配任意长度的字符串,并将其作为一个变量的一部分。
例如,在以下的规则中:
```
%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
```
%.o匹配所有以.o结尾的目标文件,%.c匹配所有以.c结尾的源文件。$<表示当前目标文件所依赖的第一个源文件,$@表示当前目标文件。这个规则的作用是将所有以.c结尾的源文件编译成对应的以.o结尾的目标文件。
另外,%_也可以用于模式匹配,例如:
```
foo_%_bar:
echo $*
```
对于任意以"foo_"开头,"_bar"结尾的目标,这个规则会输出目标名称中"foo_"和"_bar"之间的部分。例如,"foo_test_bar"会输出"test"。
相关问题
shell make $makefile_cm_para $makefile_dumpfsdb_para $makefile_dumpvpd_para $makefile_seed_para是什么意思
这是一条在 shell 中执行的命令,其中包含了四个变量:
- `$makefile_cm_para`
- `$makefile_dumpfsdb_para`
- `$makefile_dumpvpd_para`
- `$makefile_seed_para`
这些变量的值可以在命令行中通过赋值来设置,例如:
```
makefile_cm_para="-cm_name mycov -cm_dir cov_dir" makefile_dumpfsdb_para="-fsdb dump.fsdb" makefile_dumpvpd_para="-vpd dump.vpd" makefile_seed_para="-s 1234" make
```
这个命令会执行 Makefile,并将 `makefile_cm_para`、`makefile_dumpfsdb_para`、`makefile_dumpvpd_para` 和 `makefile_seed_para` 四个变量的值传递给 Makefile。
在 Makefile 中,可以使用 `$()` 或 `${}` 语法来获取变量的值,例如:
```
cm_name = $(makefile_cm_para:.*-cm_name\s\+\(\S\+\).*=\1)
cm_dir = $(makefile_cm_para:.*-cm_dir\s\+\(\S\+\).*=\1)
dumpfsdb = $(makefile_dumpfsdb_para:.*-fsdb\s\+\(\S\+\).*=\1)
dumpvpd = $(makefile_dumpvpd_para:.*-vpd\s\+\(\S\+\).*=\1)
seed = $(makefile_seed_para:.*-s\s\+\(\S\+\).*=\1)
```
在这个例子中,使用了 `$()` 语法来获取变量的值。例如,`$(makefile_cm_para:.*-cm_name\s\+\(\S\+\).*=\1)` 表示从 `makefile_cm_para` 变量的值中提取 `-cm_name` 参数的值。这样,就可以在 Makefile 中使用这些变量来控制编译选项、路径、文件名等。
需要注意的是,在 shell 中使用变量时,变量名前面必须加 `$` 符号,而在 Makefile 中使用变量时,变量名前面必须加 `$()` 或 `${}` 语法。
makefile LATE_DIRS
makefile是一种用于自动化构建和管理软件项目的工具。它使用一个名为Makefile的文件来定义项目的编译规则和依赖关系。
LATE_DIRS是一个自定义的变量,用于指定项目中需要延迟编译的目录。延迟编译意味着在整个项目构建过程中,这些目录中的文件将在其他文件之后进行编译。
在Makefile中,可以通过定义变量来指定LATE_DIRS,并在编译规则中使用这个变量来控制编译顺序。例如:
```
LATE_DIRS = dir1 dir2
all: $(LATE_DIRS) main
$(LATE_DIRS):
$(MAKE) -C $@
main: $(LATE_DIRS)
gcc -o main main.c
clean:
rm -f main
$(MAKE) -C $(LATE_DIRS) clean
```
在上面的示例中,$(LATE_DIRS)被定义为"dir1 dir2",并在all和main规则中使用。在all规则中,$(LATE_DIRS)被作为依赖项,确保在编译main之前先编译这些目录。在$(LATE_DIRS)规则中,使用$(MAKE)命令进入每个目录并执行相应的Makefile。最后,在clean规则中,也可以使用$(LATE_DIRS)来清理这些目录的生成文件。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)