c++ 如何编译包含多个源文件的项目?

r7knjye2  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(133)

我有一个主代码(.cpp)和一些其他文件(.cpp和它们对应的.h文件),其中包含了在我的主程序中使用的函数。我想知道如何编译我的文件和运行的主要代码。

pexxcrt2

pexxcrt21#

这取决于你的编译器。例如,对于GCC,你可以写:

g++ foo.cpp bar.cpp baz.cpp -o foo # compile program
./foo                              # run program
p8h8hvxi

p8h8hvxi2#

Basile's right on, you need build machinery拥有您可以轻松使用的软件。您真的希望能够运行make或类似的东西,并以可重复的方式快速重新构建您的项目。您还希望确保整个项目保持最新,重建依赖于已更改内容的所有内容。虽然您可以像在ruakh's answer中一样保留包含g++行的shell脚本,但这将不必要地重新编译超过您需要的代码。(对于小项目来说,这不是什么大问题,但当项目变得越来越大时,这就变得很重要了。
我只花了15分钟浏览了OMake文档,但它看起来很有前途。make是系统上的标准,提供了大量预定义的构建规则,包括C++的规则,因此为项目编写新的Makefile并不困难。
它看起来像这样:

# the compiler and its flags
CXX = g++
CXXFLAGS = -Wall

PROGRAM = foo

OBJECTS = foo_a.o foo_b.o foo_c.o foo_d.o

.PHONY: all

.DEFAULT: all

all: $(PROGRAM)

$(PROGRAM): $(OBJECTS)

对象foo_a.o将从相应的源文件构建,该源文件名为foo_a.cfoo_a.ccfoo_a.Cfoo_a.cppfoo_a.pfoo_a.ffoo_a.F等,适用于C、C++、Fortran、Pascal、Lex、Yacc等。
X1 E2 F1 X在这一点上是可悲的相当过时; .SUFFIX规则已经被模式规则所取代,但是在O 'Reilly的书中没有涉及模式规则。也就是说,如果完整的GNUMake文档不适合您,它仍然是一个很好的起点。

ie3xauqp

ie3xauqp3#

但真实的的答案是使用一些构建机器,例如。使用Makefile并使用GNU Make
有一些比GNU Make更好的构建器,比如Omake
编译器非常有用,因为在example by ruakh 中,当只有bar.cpp更改时,你可能不想重新编译foo.cpp,所以你需要考虑依赖性。
(and有 Makefile 生成器,如automakecmake ...)

相关问题