我希望在Linux和Windows上构建相同的Makefile。我在Linux上使用默认的GNU make,在Windows上使用mingw32-make (也是GNU )。
我想让Makefile检测它是在Windows还是Linux上运行。
例如,Windows上的make clean
命令如下所示:
clean:
del $(DESTDIR_TARGET)
但是在Linux上:
clean:
rm $(DESTDIR_TARGET)
另外,我想在Windows (\
)和Linux (/
)上使用不同的目录分隔符。
在Makefile?中检测Windows操作系统是可能的
PS:我不想模仿Windows上的Linux (cygwin等)
有类似的问题:OS检测makefile,但我在这里没有找到答案。
发布于 2010-12-22 16:15:35
我通过寻找一个只能在windows上设置的env变量来解决这个问题。
ifdef OS
RM = del /Q
FixPath = $(subst /,\,$1)
else
ifeq ($(shell uname), Linux)
RM = rm -f
FixPath = $1
endif
endif
clean:
$(RM) $(call FixPath,objs/*)
因为%OS%是windows的类型,所以它应该在所有Windows计算机上设置,而不应该在Linux上设置。
然后,这些块为不同的程序设置变量,以及将正斜杠转换为反斜杠的函数。
当调用外部命令(内部命令工作正常)时,必须使用$(调用FixPath,path)。您还可以使用以下内容:
/ := /
然后
objs$(/)*
如果你更喜欢那种格式的话。
发布于 2011-06-16 12:19:51
Windows上的SystemRoot技巧并不适用于我,但这确实适用于我:
ifeq ($(OS),Windows_NT)
#Windows stuff
...
else
#Linux stuff
....
endif
发布于 2010-10-30 13:23:34
您可能应该使用$(RM)变量来删除一些文件。
https://stackoverflow.com/questions/4058840
复制相似问题