make 不检测源文件中的更改
make does not detect changes in source files
我有以下项目结构:
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 不会重建二进制文件('all' 无需执行任何操作)。
这是为什么?我该如何解决?我想这与通配符表达式有关。
$(wildcard)
函数在 make parse time 被评估(当 %
不是特殊的时候)并且正在尝试 glob ../%/*.cs
这自然不匹配任何东西.要按照你写的那样做你想做的事,你需要使用 Secondary Expansion
.SECONDEXPANSION:
$(APPS) : %.exe : $$(wildcard ../$$*/*.cs)
也就是说,更多地手动执行此操作可能更有用(但需要更多地重写您的 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 不会重建二进制文件('all' 无需执行任何操作)。
这是为什么?我该如何解决?我想这与通配符表达式有关。
$(wildcard)
函数在 make parse time 被评估(当 %
不是特殊的时候)并且正在尝试 glob ../%/*.cs
这自然不匹配任何东西.要按照你写的那样做你想做的事,你需要使用 Secondary Expansion
.SECONDEXPANSION:
$(APPS) : %.exe : $$(wildcard ../$$*/*.cs)
也就是说,更多地手动执行此操作可能更有用(但需要更多地重写您的 makefile)。