我的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
并决定不重建它?
答案 0 :(得分:3)
Windows上的GCC会在链接时自动将.exe附加到输出文件名,尝试类似
ifneq ($(findstring mingw,$(MAKE_HOST)),)
exe := .exe
endif
myfile$(exe): $(OBJECTS)
g++ -o $@ $^
或者评论说只需对所有平台使用.exe。