C++的简单生成文件

Simple makefile for C++

本文关键字:文件 简单 C++      更新时间:2023-10-16

我在CS类的编程分配中遇到了一些问题。本周我们被介绍到makefiles,但它几乎没有被提及。目标是编写一个程序来计算用户提供的双打的平均值和总和。这个程序在g++上运行得很好,但我对makefile有问题。

我正在处理3个cpp文件:main.cpp、average.cpp、summation.cpp。以及2个头文件:average.h和summary.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汇总.cpp平均值.cpp-o main然后它将在没有任何问题的情况下编译。

我不确定我是有什么东西出了问题,还是遗漏了什么。环顾四周,我发现了很多信息,但它似乎超出了我的想象。

我认为您有两个问题。

首先,排序SRCS = summation.cpp average.cpp main.cpp。这导致CCD_ 3以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 *~.