如何避免在Windows和Linux中使用不同名称的目标重建?

时间:2017-04-28 21:02:37

标签: c++ c makefile

我的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.exe或{{1 }}。当然,我尝试在Windows上使用myfile.out作为目标名称,它会显示最新无需执行任何操作消息。

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

1 个答案:

答案 0 :(得分:3)

Windows上的GCC会在链接时自动将.exe附加到输出文件名,尝试类似

ifneq ($(findstring mingw,$(MAKE_HOST)),)
exe := .exe
endif

myfile$(exe): $(OBJECTS)
    g++ -o $@ $^

或者评论说只需对所有平台使用.exe。