2017-05-25 88 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 –

相关问题