微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > makefile如何做字符串的拆分?

makefile如何做字符串的拆分?

时间:10-02 整理:3721RD 点击:
各位大神:最近在搭建uvm平台,脚本是makefile。现在需要将输入的字符串在makefile中解析分开,比如将spi_case0分开为spi和case0,分别用来生成编译目录和仿真目录。我用shell的 str1=$$string | cut -d' ' -f1 ,打印出来的是空的,
求指教

我找到一个解决方案,不过比较丑。
先写了一个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脚本产生的文件不能够放在同一个目录下,否则不支持并行仿真,放在临时目录下会增加仿真目录。编译和仿真是分开的。仿真的过程中需要先解析出模块名称去查找模块路径。

学习一下。。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top