2017-05-25 84 views
1

簡介:我做了一個叫溫度文件2.C,當我使用終端「製作」的文件,它會返回一個錯誤:
make: *** No rule to make target 'temperature 2'. Stop.
Terminal output screenshot

這是I型進入終端窗口。
make temperature\ 2

版本信息:我使用的MacOS 10.12.5與蘋果LLVM版本8.1.0(鐺-802.0.42)
版本的Xcode 8.3.2(8E2002)

附加信息:我使用make "temperature 2"有人認爲它適用於Windows嘗試,但它不工作在Mac上。
我選擇在終端窗口中正確的目錄和我能夠完美地編譯所有其他文件。
Screenshot of the file

我知道的事實,我可以簡單地更換空間強調來解決這個問題,但我想知道這是爲什麼首先發生。
終端工作正常處理有一個空間在他們的名字其它目錄(使用反斜槓),那麼爲什麼是不是在這種情況下工作?

在此先感謝。如果文件名中包含空格,如何在C中使用'make'?

+3

顯示您make文件中的relevat線。即做一個[mcve]。 – Yunnosch

+0

可能重複:https://stackoverflow.com/questions/15004278/allow-space-in-target-of-gcc-makefile – teroi

+0

從你沒有一個Makefile的截圖,所以你是什麼'make'ing? –

回答

0

將命令提供給shell,將它們作爲命令執行。如果你有這樣一行:

.c.o: 
    $(CC) $(CFLAGS) -c -o [email protected] $< 

當您嘗試做

make "some thing".o 

它會嘗試找到一個名爲「有些東西文件。c」和將執行

cc -c -o some thing.o some thing.c 

這是嘗試編譯一些這三個文件thing.osomething.c

但是,如果你改變了規則

.c.o: 
    $(CC) $(CFLAGS) -c -o "[email protected]" "$<" 

會喂外殼與此

cc -c -o "some thing.o" "some thing.c" 

that will p導致正確的行爲。

的Makefile

.c.o: 
    $(CC) $(CFLAGS) -c -o "[email protected]" "$<" 

採樣運行(在FreeBSD系統):

$ make "the problem.o" 
cc -O -pipe -c -o "the problem.o" "the problem.c" 
2

當調用做,它需要你有一個Makefile,快速和簡單的文件C程序,

嘗試

gcc -o "temperature 2" "temperature 2.c" 

clang -o "temperature 2" "temperature 2.c" 

你的化妝明確地告訴你與:

make: *** No rule to make target 'temperature 2'. Stop. 
+0

我不想使用gcc或clang,然後使用./a.out。我只是試圖使用'make'命令來獲得結果 –

+0

我想在* NIX系統上使用make,那麼必須有一個Makefile來告訴做什麼。見[如何編寫一個Makefile來編譯一個簡單的C程序](https://stackoverflow.com/questions/21548464/how-to-write-a-makefile-to-compile-a-simple-c-program) – Danny

+0

我想補充一點,'make'正在處理所有其他文件。如果我將名稱從'temperature 2'更改爲'temperature_2' –

5

製作帶有幾個內置的規則,但他們不會進行設計,以應付在文件名稱中使用空格或其他「不尋常」的人物,所以你需要編寫覆蓋他們一個Makefile文件或更改文件名。

此規則是您正在使用的規則 - 必須在目標文件[email protected]和輸入文件$<周圍加上引號。

%: %.c 
     $(CC) $(CFLAGS) -o "[email protected]" "$<" 
+0

謝謝,它解決了我的查詢。儘管我已經添加了另一個使用部分答案的答案 –

+1

只有一個引用:您發佈的語法僅在GNU make *中有效*,這不是Mac OSX中可用的語法(它是從BSD派生的語法讓我害怕) –

+0

看看你的答案,我實際上隱約記得現在你提到它的語法。看起來GNU make仍然可以識別它:O –

相關問題