Fea*_*Joy 3 c++ makefile compilation
我在为CS类编程分配时遇到了一些麻烦.本周我们介绍了makefile,但它几乎没有被触及.目标是编写一个程序来计算用户提供的双精度的平均值和总和.该程序适用于g ++,但我遇到了makefile的问题.
我正在使用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 $@
clean:
${RM} ${PROGS} ${OBJS} *.o *~
Run Code Online (Sandbox Code Playgroud)
错误:main.cpp:31:对avg(double*, int)'
main.cpp:32: undefined reference tosum(double*,int)的未定义引用
如果我运行命令g ++ main.cpp summation.cpp average.cpp -o main那么它将编译没有任何问题.
我不确定我是否有任何故障,或者我是否遗漏了某些东西.环顾四周,我发现了很多信息,但它似乎已经超出了我的想象.
我想你在这里有两个问题.
一,订货SRCS = summation.cpp average.cpp main.cpp.这导致.o以summation.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}
Run Code Online (Sandbox Code Playgroud)
第二个${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 $@
clean:
${RM} ${PROGS} ${OBJS} *.o *~.
Run Code Online (Sandbox Code Playgroud)