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