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

时间:2011-12-14 23:45:05

标签: c++ linux compilation

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

3 个答案:

答案 0 :(得分:6)

这取决于您的编译器。例如,使用GCC,您可以写:

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

答案 1 :(得分:4)

Basile's right on, you need build machinery拥有可以轻松处理的软件。您真的希望能够运行make或类似的东西,并以可重复的方式快速重建您的项目。您还希望确保整个项目保持最新,重建依赖于已更改内容的所有内容。虽然您可以像ruakh's answer一样保留包含g++行的shell脚本,但这将不必要地重新编译,而不是您需要的。 (这对小项目来说不是什么大问题,但是当项目变得比平凡大时更重要。)

我只花了十五分钟来浏览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.p,{的相应源文件构建{1}},foo_a.f等,适用于C,C ++,Fortran,Pascal,Lex,Yacc等。

此时O'Reilly make book遗憾地过时了; foo_a.F规则已被pattern rules取代,但O'Reilly书中没有关于模式规则的报道。也就是说,如果完整的GNU Make documentation不适合你,那么它仍然是一个很好的起点。

答案 2 :(得分:1)

但真正的答案是使用一些构建机制,例如拥有Makefile并使用GNU Make

有一些比GNU Make更好的构建器,如Omake

构建器非常有用,因为在example by ruakh 中,当仅foo.cpp发生更改时,您可能不希望重新编译bar.cpp,因此您需要考虑到依赖关系。

(还有 Makefile 生成器,如automakecmake ...)

相关问题