Makefile執行過程中出錯:make: *** No rule to make target ` ‘, needed by xxx. Stop.


轉載於 :  http://www.crifan.com/makefile_error_make_no_rule_to_make_target_needed_by_stop/

 

【已解決】Makefile執行過程中出錯:make: *** No rule to make target ` ‘, needed by xxx. Stop.

【問題】

有個已有的Makefile,執行過程中出錯:

CLi@PC-CLI-1 ~/develop/docbook/books/python_topic_str_encoding/src 
$ make html 
=============================== cleaning html ============================== 
rm -rf ../output/html/single/* 
make: *** No rule to make target ` ‘, needed by `../output/html/single/python_topic_str_encoding.html’.  Stop.

 

【解決過程】

1.換到別的,和當前文件夾等價的路徑中去執行,結果卻是正常的:

CLi@PC-CLI-1 ~/develop/docbook/books/python_topic_str_encoding/src 
$ cd ../../python_topic_web_scrape/src

CLi@PC-CLI-1 ~/develop/docbook/books/python_topic_web_scrape/src 
$ make html 
=============================== cleaning html ============================== 
rm -rf ../output/html/single/* 
=============================== generating html ============================== 
export XML_CATALOG_FILES="/home/develop/docbook/config_root/catalog/catalog.xml" && \ 
export XML_DEBUG_CATALOG=1 && \

……

 

2.后來折騰半天,最后終於發現,原來是由於,當前Makefile中的內容是:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# also means main source file name
PROJECT_NAME = python_topic_str_encoding
SUB_SRC_FILES = \
    python_topic_str_encoding.xml \
    preface.xml \
    ch01_2x_vs_3x.xml \
    ch02_common_encoding_error.xml \
    ch03_other_common_case.xml \
    reference.xml \   
 
DOCBOOK_MAKEFILE_ROOT = ../../../config
################################################################################
# Include docbook makefile
################################################################################
include $(DOCBOOK_MAKEFILE_ROOT)/docbook.mk

其中,注意到,所依賴的

reference.xml \

后面還有幾個空格的,截圖才能看出來:

xml follow with space

導致了此錯誤。

把最后的,多余的空格去掉:

removed unuseful space

就可以消除此問題了。

 

【總結】

Makefile在編譯執行過程中,對於所依賴的條件,此處即一堆xml文件,最后一個是reference.xml,結果由於最后reference.xml后面,有多余的4個空格,導致Makefile將該處的4個空格,視為一個文件了,所以,必然找不到該“文件”,所以才報錯的。

所以,如果Makefile出現:

make: *** No rule to make target ` ‘, needed by xxx. Stop.

的錯誤,那么基本上都是屬於找不到所依賴的文件所導致的,所以應該去:

檢測確保,所依賴的文件,是否真實存在。

很可能,很常見的一個現象就是,此處的,誤寫了多余的空格,導致被視為依賴文件,導致找不到,導致報此錯誤。

解決辦法就很簡單,去掉多余的空格即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM