【问题标题】:make does not detect changes in source filesmake 不检测源文件中的更改
【发布时间】:2015-02-18 14:41:55
【问题描述】:

我的项目结构如下:

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 不会重新构建二进制文件(“所有”都无需执行任何操作)。

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

【问题讨论】:

标签: makefile


【解决方案1】:

$(wildcard) 函数在 make 解析时被评估(当 % 不特殊时)并试图 glob ../%/*.cs,这自然不匹配任何东西。要按照您编写的方式执行您想要的操作,您需要使用 Secondary Expansion

.SECONDEXPANSION:
$(APPS) : %.exe : $$(wildcard ../$$*/*.cs)

话虽如此,更多地手动执行此操作可能更有用(但需要更多地重写您的 makefile)。

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多