Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile Microsoft WSL生成问题_Makefile_Windows Subsystem For Linux_Ubuntu 18.04 - Fatal编程技术网

Makefile Microsoft WSL生成问题

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) $@

我正在尝试在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) $@
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
,然后您将看到它们。