makefile中include Cygwin格式的路径在make时报no such file or directory的原因及解决方法


makefile中内容如下:

.PHONY:all
C := $(shell cygpath `cygpath -ms "d:\projects\makefile"`)
include $(C)/a.mk


all:
    @echo $(A)

即此makefile包含另一个makefile--a.mk,a.mk只有一个简单的变量定义:A := AAA,a.mk文件的路径用Cygwin的命令cygpath把Windows下的路径格式转换为Cygwin的路径格式,然后在Cygwin终端中执行make命令运行此makefile,出现no such file or directory错误,但实际上此文件的路径完全正确,makefile的语法没有问题,那么问题原因是啥呢?

makefile语法规则正确,那么就有可能是解析此语法的程序有问题或者说两者搭配出现问题了。原来,虽然make.exe源自GNU,但各个机构为了兼容自家的产品,会在此make.exe的基础上做一些修改,以兼容自家产品。我们在Cygwin终端输入which make命令查看当前使用的make.exe的路径及版本,如果显示的是/usr/bin/make,说明是cygwin的make.exe,用此make.exe去执行make是不会出现找不到路径的问题;而如果是其他路径的make.exe,例如电脑装了mingw编译器,且其环境变量路径放在最前面,则在终端中执行make命令时,用的就是mingw的make.exe程序,此程序解析Cygwin的路径会出现问题导致报no such file or directory的错误。

另外需要注意的是,在安装Cygwin时,根据需要选择要安装的组件,如果想兼容Cygwin的路径,就要选装Cygwin的make.exe的程序。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM