【发布时间】:2015-06-27 21:00:00
【问题描述】:
我在完成 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 *~
错误:
main.cpp:31: 未定义引用avg(double*, int)'
main.cpp:32: undefined reference tosum(double*, int)'
如果我运行命令 g++ main.cpp summation.cpp average.cpp -o main 然后它将毫无问题地编译。
我不确定我是否有问题,或者我是否遗漏了什么。环顾四周,我发现了很多信息,但似乎超出了我的想象。
【问题讨论】:
-
您还应该看到生成错误的编译器命令 make run。那是什么?
-
将 CXX 定义为“echo g++”,然后运行并享受提示
-
为什么
{OBJS}被提及两次:${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} ${OBJS}?我认为正确的是${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN}
标签: c++ compilation makefile