我在 CS 类(class)的编程作业中遇到了一些问题。本周向我们介绍了 makefile,但几乎没有涉及。目标是编写一个程序来计算用户提供的 double 的平均值和总和。该程序适用于 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 *~
错误:
main.cpp:31: 未定义对 avg(double*, int)' 的引用
main.cpp:32: 对
sum(double*, int) 的 undefined reference
如果我运行命令 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}
第二个${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 *~.
关于c++ - C++ 的简单生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093462/