我有以下项目结构:
ProjectDir
|
+---CurrentDir
| Makefile
|
+---App1
| | Source1.cs
| | Source2.cs
| |
|
\---App2
| Source1.cs
| Source2.cs
|
我希望在CurrentDir
中构建所有应用程序。 Makefile如下:
APPS=App1.exe App2.exe
all: $(APPS)
$(APPS) : %.exe : $(wildcard ../%/*.cs)
csc /nologo /out:$@ ..\\$(basename $@)\\*.cs
应用程序构建没有任何问题,但每当我在其中一个源文件中更改某些内容时,make都不会重建二进制文件(没有什么可以为'所有')。
为什么会这样,我该如何解决这个问题?我想这与通配符表达式有关。
答案 0 :(得分:2)
{make}解析时正在评估$(wildcard)
函数(当%
不特殊时),并且正在尝试对../%/*.cs
进行求值,这当然不是.SECONDEXPANSION:
$(APPS) : %.exe : $$(wildcard ../$$*/*.cs)
匹配任何东西要做到你想要的,你需要使用Secondary Expansion
{{1}}
有人说,在stanges中手动执行此操作可能更有用(但需要更多重写makefile)。