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

Meir 148 c++ makefile compilation header

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

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

Goz.. 196

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

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

等等.

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

  • 你甚至可以做`g ++*.cpp -o output` (137认同)
  • @gabriel_vincent,这不一定是不好的做法,但这意味着在数百个项目中编辑一个文件将导致编译器重做所有文件的所有工作.单独编译允许增量编译. (8认同)
  • 这无论如何都是一种不好的做法?我想在我的makefile中使用它. (7认同)
  • 是我小时候以来所有问题的答案 (3认同)

FredAKA.. 47

要在不链接的情况下单独编译,您需要添加-c选项:

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

  • 注意,如果要在链接步骤中控制可执行文件的名称,请执行通常的操作:`g ++ -o my_executable myclass.o main.o` (2认同)

Dummy00001.. 20

现在我已经将类分隔为.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也可以正确地重建由于头文件更改而需要重建的内容.


小智.. 10

如果需要,您仍然可以直接使用g ++:

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

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


小智.. 7

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

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

然后运行你的程序 ./myprogram


小智.. 7

我知道这个问题是在几年前提出的,但仍然想分享我通常如何编译多个c ++文件。

  1. 假设您有5个cpp文件,您所要做的就是使用*而不是键入每个cpp文件名Eg g++ -c *.cpp -o myprogram
  2. 这将产生 "myprogram"
  3. 运行程序 ./myprogram

就这样!!

我使用*的原因是,如果您有30个cpp文件怎么办?或只使用*号并节省时间:)

ps仅在不关心makefile时才使用此方法。