2015-06-27 22 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 *~.