使用G ++编译多个.cpp和.h文件

时间:2010-07-08 09:18:58

标签: c++ compilation header makefile

我刚刚继承了一些C ++代码,这些代码用一个cpp文件编写得很糟糕,其中包含main和一堆其他函数。还有.h个文件,其中包含类及其函数定义。

到目前为止,该程序是使用命令g++ main.cpp编译的。现在我已经将类分离到.h.cpp文件了,我是否需要使用makefile,还是仍然可以使用g++ main.cpp命令?

11 个答案:

答案 0 :(得分:176)

列出main.cpp之后的所有其他cpp文件。

g++ main.cpp other.cpp etc.cpp

等等。

或者您可以单独编译它们。然后,将所有生成的“.o”文件链接在一起。

答案 1 :(得分:41)

要单独编译而不进行链接,您需要添加-c选项:

g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out

答案 2 :(得分:19)

  

既然我已经将类分隔为.h和.cpp文件,我是否需要使用makefile,还是仍然可以使用“g ++ main.cpp”命令?

如果要将它放入Makefile中,一次编译几个文件是一个糟糕的选择。

通常在Makefile中(对于GNU/Make),只需编写:

# "all" is name of the default target, running "make" without params would use it
all: executable1

# for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker
CC=$(CXX)

# tell which files should be used, .cpp -> .o make would do automatically
executable1: file1.o file2.o

那样make只能正确地重新编译需要重新编译的内容。还可以添加一些调整来生成头文件依赖项 - 这样make也可以正确地重建由于头文件更改而需要重建的内容。

答案 3 :(得分:9)

如果您愿意,您仍然可以直接使用g ++:

g++ f1.cpp f2.cpp main.cpp

其中f1.cpp和f2.cpp是包含其中函数的文件。有关如何使用make进行构建的详细信息,请参阅优秀的GNU make documentation

答案 4 :(得分:5)

我知道这个问题已在几年前被问过,但仍想分享我通常如何编译多个c ++文件。

  1. 假设你有5个cpp文件,你所要做的就是使用*而不是输入每个cpp文件名E.g g++ -c *.cpp -o myprogram
  2. 这将生成"myprogram"
  3. 运行程序./myprogram
  4. 全部!!

    我使用*的原因是,如果你有30个cpp文件,你会输入所有这些文件吗?或者只使用*符号并节省时间:)

    p.s仅在您不关心makefile时才使用此方法。

答案 5 :(得分:3)

你可以使用几个g ++命令然后链接,但最简单的方法是使用传统的Makefile或其他一些构建系统:比如Scons(通常比Makefile更容易设置)。

答案 6 :(得分:3)

.h文件与编译无关...你只关心cpp文件...所以输入g++ filename1.cpp filename2.cpp main.cpp -o myprogram

表示您正在编译每个cpp文件,然后将它们链接到myprgram

然后运行您的计划./myprogram

答案 7 :(得分:2)

如果要在cpp文件中使用#include <myheader.hpp>,则可以使用:

g++ *.cpp -I. -o out

答案 8 :(得分:0)

我曾经使用自定义Makefile来编译当前目录中的所有文件,但我每次都需要将它复制到我需要它的每个目录中。

所以我创建了自己的工具 - Universal Compiler,这使得编译多个文件时的过程变得更加容易。

答案 9 :(得分:0)

正如 rebenvp 所说,我曾经使用过:

g++ *.cpp -o output

然后执行此操作以输出:

./output

但是更好的解决方案是使用make文件。阅读here,以了解有关make文件的更多信息。

还要确保已在.h文件中添加了所需的.cpp文件。

答案 10 :(得分:-4)

〜/ In_ProjectDirectory $ g ++ coordin_main.cpp coordin_func.cpp coordin.h

〜/ In_ProjectDirectory $ ./a.out

......工作!!

在Geany IDE中使用Linux Mint

当我将每个文件保存到同一目录时,一个文件未在目录中正确保存; coordin.h文件。因此,重新检查并将其保存为coordin.h,而不是错误的 - &gt; coordin.h.gch。小东西。 精氨酸!!