c++ - C++ 的简单生成文件

标签 c++ compilation makefile

我在 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 .这会导致 .osummation.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/

相关文章:

c++ - 是否有任何 GTKmm 版本编译标志?

c++ - 在 shell 中为 make 设置 GCC 版本

c++ - 麻烦 : convert string to double

c++ - VC++ VS 2013,如何使用(测试)来自另一个项目的类?

c++ - 创建具有特定权限的线程c++

c - 如何为具有多个文件夹的项目编写单个 Makefile?

linux - vmware Player 无法在 kubuntu 中启动服务

makefile - 在 macbook pro 上制作 yolo/"cuda_runtime.h"

linux - qt 5.7.0 在配置后在 cygwin 中出错

c++ - 如何使用 CMake 订购/设计使用更高的共享库包括