make不会检测源文件中的更改

时间:2015-02-18 14:41:56

标签: makefile

我有以下项目结构:

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都不会重建二进制文件(没有什么可以为'所有')。

为什么会这样,我该如何解决这个问题?我想这与通配符表达式有关。

1 个答案:

答案 0 :(得分:2)

{make}解析时正在评估$(wildcard)函数(当%不特殊时),并且正在尝试对../%/*.cs进行求值,这当然不是.SECONDEXPANSION: $(APPS) : %.exe : $$(wildcard ../$$*/*.cs) 匹配任何东西要做到你想要的,你需要使用Secondary Expansion

{{1}}

有人说,在stanges中手动执行此操作可能更有用(但需要更多重写makefile)。