Compiling
我的手寫 C++ Makefile 給出命令未找到
我製作了一個 makefile 來幫助編譯多個 C++ 文件,但它給了我“找不到命令”錯誤。我需要修復它。
我得到的錯誤:
Make: line 1: main.out::command not found g++: error: GradeBook.o: No such file or directory g++: error: main.o: No such file or directory g++: fatal error: no input files compilation terminated. Make: line 4: main.o:: command not found Make: line 7: GradeBook.o:: command not found Make: line 10: clear:: command not found
這是我的生成文件:
main.out: GradeBook.o main.o g++ -Wall -g -o main.out GradeBook.o main.o main.o: main.cpp GradeBook.h g++ -Wall -g -c main.cpp GradeBook.o: GradeBook.cpp GradeBook.h g++ -Wall -g -c GradeBook.cpp clean: rm -f main.out main.o GradeBook.o
以下是人們使用 makefile 所犯的典型錯誤列表。
問題 #1 - 使用空格而不是製表符
make
眾所周知,該命令對Makefile
. 您需要確保與給定目標關聯的操作以製表符而不是空格為前綴。那是一個
Tab
後跟要為給定目標執行的命令。例子
這是你的目標。
main.out: GradeBook.o main.o
Tab
後面的命令前面應該有一個。g++ -Wall -g -o main.out GradeBook.o main.o ^^^^--Tab
這是您清理的 Makefile
//Here is my makefile: main.out: GradeBook.o main.o g++ -Wall -g -o main.out GradeBook.o main.o main.o: main.cpp GradeBook.h g++ -Wall -g -c main.cpp GradeBook.o: GradeBook.cpp GradeBook.h g++ -Wall -g -c GradeBook.cpp clean: rm -f main.out main.o GradeBook.o
問題 #2 - 命名錯誤
該工具
make
期望呼叫該文件Makefile
。其他任何事情,您都需要告訴make
它要使用的文件。$ make -f mafile -or- $ make --file=makefile -or- $ make -f smurfy_makefile
**注意:**如果您命名您的文件
Makefile
,那麼您只需執行以下命令即可:$ make
問題 #3 - 執行 Makefile
Makefile
是命令的數據文件make
。它們不是執行檔。例子
使其可執行
$ chmod +x makefile
執行
$ ./makefile ./makefile: line 1: main.out:: command not found g++: error: GradeBook.o: No such file or directory g++: error: main.o: No such file or directory g++: fatal error: no input files compilation terminated. ./makefile: line 4: main.o:: command not found g++: error: main.cpp: No such file or directory g++: fatal error: no input files compilation terminated. ./makefile: line 7: GradeBook.o:: command not found g++: error: GradeBook.cpp: No such file or directory g++: fatal error: no input files compilation terminated. ./makefile: line 10: clean:: command not found
其他問題
除了上述提示之外,我還建議您充分利用
make
’ 進行“試執行”或“測試模式”的能力。開關:-n, --just-print, --dry-run, --recon Print the commands that would be executed, but do not execute them (except in certain circumstances).
例子
執行文件
makefile
。$ make -n -f makefile g++ -Wall -g -c GradeBook.cpp g++ -Wall -g -c main.cpp g++ -Wall -g -o main.out GradeBook.o main.o
但請注意,當我們執行此命令時,實際上並沒有創建任何結果文件:
$ ls -l total 4 -rw-rw-r--. 1 saml saml 0 Dec 22 08:39 GradeBook.cpp -rw-rw-r--. 1 saml saml 0 Dec 22 08:45 GradeBook.h -rw-rw-r--. 1 saml saml 0 Dec 22 08:45 main.cpp -rwxrwxr-x. 1 saml saml 262 Dec 22 08:25 makefile