2015-06-27 24 views
3

我在编写CS类的编程时遇到了一些麻烦。我们在本周被引入makefiles,但几乎没有涉及到。目标是编写一个程序来计算用户提供的双打的平均和总和。该程序适用于g ++,但我遇到了makefile问题。C++的简单生成文件

我正在处理3个cpp文件:main.cpp,average.cpp,summation.cpp。 和2头文件:average.h和summation.h

下面是一个make文件我曾尝试:

CXX = g++ 
CXXFLAGS = -std=c++0x -Wall -pedantic-errors -g 

SRCS = summation.cpp average.cpp main.cpp 
OBJS = ${SRCS:.cpp=.o} 
HEADERS = summation.h average.h 

MAIN = myprog 

all: ${MAIN} 
    @echo Simple compilter named myprog has been compiled 

${MAIN}: ${OBJS} ${HEADERS} 
    ${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} ${OBJS} 

.cpp.o: 
    ${CXX} ${CXXFLAGS} -c $< -o [email protected] 

clean: 
    ${RM} ${PROGS} ${OBJS} *.o *~ 

错误: 的main.cpp:31:未定义参考avg(double*, int)' main.cpp:32: undefined reference to总和(双* ,int)'

如果我运行命令 g ++ main.cpp summation.cpp average.cpp -o main 然后它会编译时没有任何问题。

我不确定我是否有什么不合适的事情,或者我错过了什么。环顾四周,我发现了很多信息,但似乎超出了我的想象。

+0

大声笑!标题..... –

+0

您还应该看到生成错误的编译器命令make ran。它以前如何? – Useless

+0

将CXX定义为“echo g ++”,然后运行并享受提示 –

回答

5

我想你在这里有两个问题。

一,订购SRCS = summation.cpp average.cpp main.cpp。这会导致.osummation.o average.o main.o的顺序提供给g ++,这会导致未定义的错误。您希望以main.o summation.o average.o的顺序提供它们,因此SRCS应该是SRCS = main.cpp summation.cpp average.cpp

${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} ${OBJS} 

不需要第二${OBJS}

其次,在该行。
请尝试以下操作:

CXX = g++ 
CXXFLAGS = -std=c++0x -Wall -pedantic-errors -g 

SRCS = main.cpp summation.cpp average.cpp 
OBJS = ${SRCS:.cpp=.o} 
HEADERS = summation.h average.h 

MAIN = myprog 

all: ${MAIN} 
     @echo Simple compilter named myprog has been compiled 

${MAIN}: ${OBJS} 
     ${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} 

.cpp.o: 
     ${CXX} ${CXXFLAGS} -c $< -o [email protected] 

clean: 
     ${RM} ${PROGS} ${OBJS} *.o *~.