2017-05-25 8 views
1

紹介:
make: *** No rule to make target 'temperature 2'. Stop.
Terminal output screenshot

これは私がタイプです:
私は2.C温度と呼ばれ、私は、ファイルを「作る」にターミナルを使用する場合、それはエラーを返し、ファイルを作りましたターミナルウィンドウに表示します。
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

私は単に問題を修正するアンダースコアスペースを置き換えることができるという事実を認識してんだけど、私はこれが最初の場所で起こっている理由を知りたいです。
端末は、の空白()の名​​前に(バックスラッシュを使用して)他のディレクトリをうまく処理するので、なぜこの場合は動作しませんか?

ありがとうございます。迅速かつ簡単な1ファイルCプログラムのための
スペースを含むファイル名の場合、Cで 'make'を使うにはどうすればいいですか?

+3

は、あなたのメイクファイルからrelevat行を表示します。私。 [mcve]を作ってください。 – Yunnosch

+0

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

+0

スクリーンショットから、あなたはMakefileを持っていないので、あなたは 'make 'していますか? –

答えて

0

makeはコマンドをコマンドとして実行するシェルにコマンドを送ります。あなたはこのような1行がある場合:

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

をあなたは

make "some thing".o 

をしようとするときには、「いくつかのことというファイルを見つけようとします。C」と

cc -c -o some thing.o some thing.c 
一部に三つのファイル thing.oをコンパイルしようとすることです

something.c

を実行します。しかし、あなたが

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

にルールを変更した場合には、フィードますシェルこれと

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

これは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を持っているあなたを必要とし、

があなたのメイクがはっきりわかります

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が必要です。 [単純なCプログラムをコンパイルするためのMakefileの記述方法](https://stackoverflow.com/questions/21548464/how-to-write-a-makefile-to-compile-a-simple-c-program) – Danny

+0

私は、 'make'が他のすべてのファイルと連携していると付け加えたいと思います。 'temperature 2'から 'temperature_2'に変更すると動作します –

5

Makeにはいくつかのルールが組み込まれていますが、ファイル名のスペースやその他の「異常な」文字に対応するようには設計されていないので、それらを上書きするMakefileを記述するか、ファイル名を変更する必要があります。

このルールは、ターゲットファイル[email protected]と入力ファイル$<の前後に引用符を付ける必要があります。

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

ありがとう、それは私のクエリを解決しました。あなたの回答の一部を使用する別の回答を追加しましたが、 –

+1

ただ1つの引用:あなたが投稿している構文は、Mac OSXで利用できるmakeではない* GNU make *でのみ有効です*(BSDから派生したものです –

+0

あなたの答えを見て、私は実際にあなたがそれに言及したときにその文法を実際にはぼんやりと覚えています。 GNU makeがまだそれを認識しているように見える:O –

関連する問題