Compiling

我的手寫 C++ Makefile 給出命令未找到

  • January 26, 2019

我製作了一個 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

引用自:https://unix.stackexchange.com/questions/106193