Makefile Microsoft WSL生成问题
我正在尝试在WSL中构建一个项目。同一个项目在ubuntu18.04 VM中编译,但不在WSL ubuntu18.04中编译。我看到的问题是make无法在makefile中包含MakefileCommom。 makefile的内容如下:Makefile Microsoft WSL生成问题,makefile,windows-subsystem-for-linux,ubuntu-18.04,Makefile,Windows Subsystem For Linux,Ubuntu 18.04,我正在尝试在WSL中构建一个项目。同一个项目在ubuntu18.04 VM中编译,但不在WSL ubuntu18.04中编译。我看到的问题是make无法在makefile中包含MakefileCommom。 makefile的内容如下: -include ~/MakefileCommon RM := rm -rf all: $(MAKE) -f ./$(MAKEFILE_TARGET) $@ clean: $(MAKE) -f ./$(MAKEFILE_TARGET) $@
-include ~/MakefileCommon
RM := rm -rf
all:
$(MAKE) -f ./$(MAKEFILE_TARGET) $@
clean:
$(MAKE) -f ./$(MAKEFILE_TARGET) $@
image:
$(MAKE) -f ./$(MAKEFILE_TARGET) $@
uninstall:
$(MAKE) -f ./$(MAKEFILE_TARGET) $@
-include ../makefile.targets
我使用的命令是:
make -C builds clean all
我得到的错误是:
make -f ./ clean
make[1]: *** ./: Is a directory. Stop.
因此,我看到,$(MAKEFILE_TARGET)正在导入注释。import语句位于MakefileCommon中,路径名中的tilde
~
是一个神奇的字符,可扩展到POSIX系统上用户的主目录。我不知道它在Windows中扩展到什么,但我猜这不是您所期望的。尝试在此处放置真实路径,而不是使用~
。此外,您还可以运行make-d
并检查输出,查看它用于MakefileCommon的路径名,它也显示了相同的问题。我甚至还用了一个。而不是a~。但还是一样的问题您是否尝试过我的建议,使用-d
选项运行make,并查看MakefileCommon
的输出,以查看它要查找的路径?这条路存在吗?它是否设置了MAKEFILE\u TARGET
变量?也许你应该尝试删除-include
,而只使用include
来代替MakefileCommon
,这样如果该文件不存在,它就会失败。我尝试了,我得到错误文件不存在。如果我使用~
,那么它会搜索/home/yash/MakefileCommon
文件,这是错误的路径。因此,不确定它为什么不在文件实际所在的/home/yash/Project/builds
中搜索builds目录。同样在windows中,当我执行ls
操作时,我在列表中看不到
和。
。因此,我假设windows只是忽略了
,这就是为什么它无法找到/Makefilecommon
,因为它正在被更改为/Makefilecommon
。我想您可能会感到困惑。波浪号字符始终代表用户的主目录(在POSIX系统上也是如此)。因此,~/MakefileCommon
总是指用户主目录中的文件MakefileCommon
,这正是make在上面寻找的。如果要在其他目录中查找MakefileCommon
,则不能使用~
。尤其是~
并不表示当前目录(除非当前目录是用户的主目录。要在当前目录中查找文件,只需使用include MakefileCommon
或include./MakefileCommon
。至于ls
不显示
或。
,这是正常的:以
字符开头的文件和目录默认情况下,“隐藏”和ls
不会显示它们。在POSIX系统上也是如此。如果要查看包括隐藏文件在内的所有文件,请使用-a
选项:ls-a
,然后您将看到它们。