如何避免在Windows和Linux中具有不同名称的目标重建

How to avoid rebuilding in targets with different names in Windows and Linux?

本文关键字:重建 目标 何避免 Windows Linux      更新时间:2023-10-16

我在makefile

中有这个
myfile: $(OBJECTS)
    g++ -o $@ $^

这应该转换为

之类的东西
g++ -o myfile XXX.o YYY.o ZZZ.o

但这在Windows和Linux中产生不同的输出

Windows: myfile.exe

linux: myfile.out

因此,当我再次运行make时,它将重建(即使没有更改(,因为目标名称是myfile而不是myfile.exemyfile.out。当然,我尝试使用myfile.exe作为Windows上的目标名称,并且它显示了我想要的最新我想要的消息。

我如何解决此问题,以便找到myfile.exe|out并决定不重建?

windows上的gcc将在链接时自动将.exe附加到输出文件名上,尝试

之类的东西
ifneq ($(findstring mingw,$(MAKE_HOST)),)
exe := .exe
endif
myfile$(exe): $(OBJECTS)
    g++ -o $@ $^

或当评论所说的所有平台时都使用.exe。