Makefile区分Windows和类Unix系统
我想在Linux和Windows上有相同的Makefile。 我使用Linux上的默认GNU make和Windows上的mingw32-make (也是GNU make )。
我想让Makefile检测它是在Windows还是Linux上运行。
例如,在Windows上make clean
命令如下所示:
clean: del $(DESTDIR_TARGET)
但在Linux上:
clean: rm $(DESTDIR_TARGET)
另外我想在Windows( \
)和Linux( /
)上使用不同的目录分隔符。
在Makefile中检测Windows操作系统是可能的?
PS: 我不想在Windows上模拟Linux(cygwin等)
有一个类似的问题: 操作系统检测到makefile ,但我没有在这里find答案。
我通过寻找一个只能在windows上设置的envvariables来解决这个问题。
ifdef SYSTEMROOT RM = del /Q FixPath = $(subst /,\,$1) else ifeq ($(shell uname), Linux) RM = rm -f FixPath = $1 endif endif clean: $(RM) $(call FixPath,objs/*)
因为%SystemRoot%是Windows目录的path,应该在所有Windows计算机上设置,而不是在Linux上。
块然后为不同的程序设置variables,以及将正斜杠转换成反斜杠的function。
你必须使用$(调用FixPath,path)当你调用一个外部命令(内部命令工作正常)。 你也可以使用像这样的东西:
/ := /
接着
objs$(/)*
如果你喜欢这种格式更好。
SystemRoot技巧在Windows XP上不适用于我,但是这样做:
ifeq ($(OS),Windows_NT) #Windows stuff ... else #Linux stuff .... endif
您应该使用$(RM)variables来删除一些文件。
我想在Linux和Windows上有相同的Makefile。
也许你会喜欢CMake