希望这是一个关于 make 模式规则的基本问题:我想在规则的先决条件中多次使用通配符,即在我的 Makefile 中我有
data/%P1.m: $(PROJHOME)/data/%/ISCAN/%P1.RAW
@echo " Writing temporary matlab file for $*"
# do something
data/%P2.m: $(PROJHOME)/data/%/ISCAN/AGP2.RAW
@echo " Writing temporary matlab file for $*"
# do something
Run Code Online (Sandbox Code Playgroud)
在此示例中,我尝试在通配符 % 为 AG 时调用 make。两个文件 $(PROJHOME)/data/AG/ISCAN/AGP1.RAW 和 $(PROJHOME)/data/AG/ISCAN/AGP2.RAW 都存在。我尝试以下 make 命令并获得此输出:
[jshen@iLab10 gender-diffs]$ make data/AGP1.m
make: *** No rule to make target `data/AGP1.m'. Stop.
[jshen@iLab10 gender-diffs]$ make data/AGP2.m
Writing temporary matlab file for AG, part 2...
[jshen@iLab10 gender-diffs]$ ls data/AG/ISCAN/AG*
data/AG/ISCAN/AGP1.RAW data/AG/ISCAN/AGP2.RAW
Run Code Online (Sandbox Code Playgroud)
如何在第一个 make 规则中实现同一个通配符的多个实例?
简单的问题:我在matlab 7.x中打开一个文件,我想在读它之前测试它是否为空.最好的方法是什么?
对于那里的matlab大师来说这是半个问题和半个挑战:我想让一个函数接受逻辑数组(false/true)并给出包含trues的所有连续区域的开头和结尾struct数组.
像这样的东西:
b = getBounds([1 0 0 1 1 1 0 0 0 1 1 0 0])
Run Code Online (Sandbox Code Playgroud)
应该回来
b = 3x1 struct array with fields:
beg
end
Run Code Online (Sandbox Code Playgroud)
和
>> b(2)
ans =
beg: 4
end: 6
Run Code Online (Sandbox Code Playgroud)
我已经有了一个实现,但我真的不知道如何处理struct数组,所以我想问你怎么做 - 我必须通过mat2cell处理,当我必须处理更大的struct时数组变得很麻烦.我看起来像这样:
df = diff([0 foo 0]);
a = find(df==1); l = numel(a);
a = mat2cell(a',ones(1,l))
[s(1:l).beg] = deal(a{:});
b = (find(df==-1)-1);
b = mat2cell(b',ones(1,l))
[s(1:l).end] = deal(b{:});
Run Code Online (Sandbox Code Playgroud)