如何避免在 Windows 和 Linux 中使用不同名称的目标进行重建?
Posted
技术标签:
【中文标题】如何避免在 Windows 和 Linux 中使用不同名称的目标进行重建?【英文标题】:How to avoid rebuilding in targets with different names in Windows and Linux? 【发布时间】:2017-04-28 21:02:37 【问题描述】:我的 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
或myfile.out
。当然,我尝试在 Windows 上使用myfile.exe
作为目标名称,它会显示我想要的最新或无事可做消息。
我该如何解决这个问题,以便 Make 找到 myfile.exe|out
并决定不重建它?
【问题讨论】:
嗯,如果您正在构建或为不同的操作系统构建,则需要重新构建所有内容。还是我误解了这个问题? 当然可以,但是如果我在同一个平台上再次重建,它将在没有up to date
的情况下再次重建。
在Linux
上应该只产生myfile
而不是myfile.out
是您的确切makefile 条目吗?
@Galik 不管 Linux 产生什么,在 Windows 上它总是会重建它,因为它只需要 myfile.exe
而不是其他任何东西
您在 Windows 上使用的是哪个编译系统。
【参考方案1】:
Windows 上的 GCC 会在链接时自动将 .exe 附加到输出文件名,尝试类似
ifneq ($(findstring mingw,$(MAKE_HOST)),)
exe := .exe
endif
myfile$(exe): $(OBJECTS)
g++ -o $@ $^
或者正如 cmets 所说,对所有平台使用 .exe。
【讨论】:
以上是关于如何避免在 Windows 和 Linux 中使用不同名称的目标进行重建?的主要内容,如果未能解决你的问题,请参考以下文章
Linux 用户应该使用哪种 IDE/编译器组合在 Windows 上构建 Qt 应用程序,同时避免使用 MS Visual Studio?