2014-02-09 135 views
1

我已经做了:Makefile的问题:G ++:致命错误:没有输入文件

我已经通过其他StackOverflow的线程有类似的问题看,但他们都不适用于我的具体情况。我还仔细检查过,以确保正确的文件位于正确的位置(文件夹),并且所有内容都正确命名。

这是我收到的错误:

[[email protected]]$ make 
g++ -Wall -O2 -ansi -pedantic -o dog.cpp 
g++: fatal error: no input files 
compilation terminated. 
make: *** [mscp.o] Error 4 

这里是有问题的生成文件:

CC = g++ 
CFLAGS = -Wall -O2 -ansi -pedantic -Werror 

TARGETS = dog dog.o collar.o 

dog: dog.o collar.o 
    $(CC) $(CFLAGS) -o dog collar.o dog.o 

dog.o: dog.cpp collar.h 
    $(CC) $(CFLAGS) -o dog.cpp 

collar.o: collar.cpp collar.h 
    $(CC) $(CFLAGS) -o collar.cpp 

clean: 
    -rm -f ${TARGETS} 

以下是文件(他们都在同一目录)正在引用的生成文件:

-collar.cpp 
-collar.h 
-makefile 
-dog.cpp 

我做错了什么?

+0

http://www.rapidtables.com/code/linux/gcc/gcc-o.htm – willll

+1

什么是'mscp.cpp'? –

+0

对不起,我的意思是dog.cpp。固定。 – NewGradDev

回答

2

dog.o: dog.cpp collar.h 
    $(CC) $(CFLAGS) -o dog.cpp 

collar.o: collar.cpp collar.h 
    $(CC) $(CFLAGS) -o collar.cpp 

应该读

dog.o: dog.cpp collar.h 
    $(CC) $(CFLAGS) -c dog.cpp 

collar.o: collar.cpp collar.h 
    $(CC) $(CFLAGS) -c collar.cpp 
+0

啊,拍这是我错过了。我忘了在“-o”之后包含可执行文件的名称。我尝试用“-c”替换“-o”,这也起作用。感谢您指点我正确的方向! – NewGradDev

+0

请注意,在'file.cpp'中使用'-c'时,输出文件的名称默认为'file.o',因此您可以省略'-o file.o',除非您不需要默认目标文件的文件名。 – smani

2

尝试做

$(CC) $(CFLAGS) - c collar.cpp -o compiledfilename 

Compiledfilename是二进制文件的名称。

+0

你还需要'-c'。 – smani

+0

使用$(CC)$(CFLAGS)-c collar.cpp - 二进制文件名 –

0

我知道现在回答已经太迟了。但这可能会帮助其他人。我遇到过同样的问题。我用.HPP文件替换.H文件固定它。它的工作:)

相关问题