makefile如何做字符串的拆分?
求指教
我找到一个解决方案,不过比较丑。
先写了一个perl脚本,用来切割字符。文件名是split_case_name.pl,代码如下:
#!/usr/bin/perl
use strict;
my $var_num= $ARGV[0];
my $case_name = $ARGV[1];
my @fields = split /_/, $case_name;
if ($var_num == 0) {
print $fields[0];
}
else {
print $fields[1];
}
然后Makefile的代码如下:
TEST_NAME = spi_case0
COM_DIR= $(shell ./split_case_name.pl 0 $(TEST_NAME))
SIM_DIR= $(shell ./split_case_name.pl 1 $(TEST_NAME))
PRINT :
-echo $(COM_DIR)
-echo $(SIM_DIR)
我一开始想用awk来解决这个问题,但是结果死活不对,不知道为什么。请大家帮我看一下:
TEST_NAME = spi_case0
COM_DIR= $(shell echo $(TEST_NAME) | awk -F '_' '{print $1}')
SIM_DIR= $(shell echo $(TEST_NAME) | awk -F '_' '{print $2}')
PRINT :
-echo $(COM_DIR)
-echo $(SIM_DIR)
perl脚本确实很好做,之前我也是这样做的,但是我需要在makefile的target中进行字符串的拆分,所以只能makefile调用shell了。在指定的目录下通过perl生成两个文件,然后提取这两个文件的名称。现在的问题是,我是想通过解析出来的模块名称去查找work目录下的路径,在linux系统中,文件名和路径是不能够重名的。所以perl脚本产生的文件需要放在什么地方呢?如果是同模块的不同CASE并行仿真的话文件可能会出现覆盖的情况。这样做可能存在问题
我不熟悉这个语法。但是makefile只能在target之外进行makefile变量赋值。想在makefile的target中进行赋值的话,只能通过shell变量。
不是很理解小编的要求啊,我觉得用perl应该满足小编要求的。
平台设计的初衷是只编译一次代码,模块按照模块编译,系统按照系统编译。仿真的过程中,用户会输入module_name_case_name之类的字符串,比如dma_case10,makefile需要解析这个字符串,在该模块的目录下创建case_10目录,在目录下存放仿真结果。makefile智能调用perl的命令,能够让perl生成dma和case10的文件名,通过提取文件名来进行操作。perl脚本产生的文件不能够放在同一个目录下,否则不支持并行仿真,放在临时目录下会增加仿真目录。编译和仿真是分开的。仿真的过程中需要先解析出模块名称去查找模块路径。
学习一下。。