【问题标题】:Microsoft WSL make issueMicrosoft WSL 发出问题
【发布时间】:2018-09-07 05:50:00
【问题描述】:

我正在尝试在 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) 是被导入的音符。导入语句在 MakefileCommon 中

【问题讨论】:

    标签: makefile windows-subsystem-for-linux ubuntu-18.04


    【解决方案1】:

    路径名中的波浪符号~ 是一个神奇的字符,它在 POSIX 系统上扩展到用户的主目录。我不知道它在 Windows 中扩展到什么,但我猜这不是你所期望的。尝试在此处放置真实路径,而不是使用~。您也可以运行 make -d 并检查输出以查看它用于 MakefileCommon 的路径名。

    【讨论】:

    • 我做了,它也显示了同样的问题。我什至用了一个 .而不是~。但还是同样的问题
    • 您是否尝试过我的建议,即使用-d 选项运行make 并查看MakefileCommon 的输出以查看它正在寻找的路径是什么?那条路存在吗?它是否设置了MAKEFILE_TARGET 变量?也许您应该尝试删除-include,而只使用include 代替MakefileCommon,这样如果该文件不存在,它将失败。
    • 我试过了,我得到错误file does not exist。如果我使用~,那么它会搜索/home/yash/MakefileCommon 文件,这是错误的路径。因此,不确定为什么它不搜索文件实际所在的/home/yash/Project/builds 中的 builds 目录。同样在 Windows 中,当我执行 ls 时,我在列表中看不到 ...。所以我假设 Windows 只是忽略了.,这就是为什么它无法找到./Makefilecommon,因为它正在更改为/MakefileCommon
    • 我想你可能会感到困惑。波浪字符始终代表用户的主目录(在 POSIX 系统上也是如此)。所以~/MakefileCommon 总是表示用户主目录中的文件MakefileCommon,这正是make 在上面寻找的。如果您想在其他目录中查找MakefileCommon,则不能使用~。特别是~ not 表示当前目录(除非当前目录是用户的主目录。要在当前目录中查找文件,您只需使用include MakefileCommoninclude ./MakefileCommon
    • 至于ls不显示...,这是正常的:以.字符开头的文件和目录是“隐藏的”,ls不会显示它们默认情况下。在 POSIX 系统上也是如此。如果您想查看包括隐藏文件在内的所有文件,请使用-a 选项:ls -a 然后您就会看到它们。
    猜你喜欢
    • 2021-07-10
    • 2021-12-29
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2022-08-24
    • 2021-03-28
    相关资源
    最近更新 更多