C++ 的简单生成文件
Simple makefile for C++
我在 CS class 的编程作业中遇到了一些问题。本周向我们介绍了 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 to
sum(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}
不需要第二个${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 *~.
我在 CS class 的编程作业中遇到了一些问题。本周向我们介绍了 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 to
sum(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}
不需要第二个${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 *~.