Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用多个源文件编译项目?_C++_Linux_Compilation - Fatal编程技术网

C++ 如何使用多个源文件编译项目?

C++ 如何使用多个源文件编译项目?,c++,linux,compilation,C++,Linux,Compilation,我有一个主代码(.cpp)和一些其他文件(.cpp及其相应的.h文件),其中包含主程序中使用的函数。我想知道如何编译文件和运行主代码。这取决于您的编译器。例如,使用GCC,您可以编写: g++ foo.cpp bar.cpp baz.cpp -o foo # compile program ./foo # run program 但真正的答案是使用一些制造机械,比如说,拥有一台机器并使用它 有一些比GNU更好的生成器,比如 构建器非常有

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

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

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

但真正的答案是使用一些制造机械,比如说,拥有一台机器并使用它

有一些比GNU更好的生成器,比如

构建器非常有用,因为在by ruakh中,当只有
bar.cpp
更改时,您可能不想重新编译
foo.cpp
,因此需要考虑依赖关系

(还有Makefile生成器,比如
automake
cmake
…)

可以让您轻松使用软件。您确实希望能够运行
make
或类似的程序,以可重复的方式快速重新构建项目。您还希望确保整个项目保持最新,重建依赖于已更改内容的所有内容。虽然您可以像中一样保留包含
g++
行的shell脚本,但这将不必要地重新编译超出您需要的代码。(对于小项目来说,这不是什么大问题,但当项目变得比琐碎的项目更大时,这一点就变得重要了。)

我只花了15分钟浏览了OMake文档,但它看起来很有希望<代码>使在系统上是标准的,并且提供了大量的预先定义的构建规则,包括C++规则,因此,为项目编写新的<代码> MaFaMeCu/<代码>并不困难。 它看起来像这样:

# 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)
<> >对象> C++ >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >代码> >脚> .f>代码>代码> > F>、Pascal、Lax、YACC等.


令人遗憾的是,这本书在这一点上已经过时了;
.SUFFIX
规则已被取代,但O'Reilly书中没有涉及模式规则。也就是说,如果完整版本不适合您,那么它仍然是一个很好的起点。

我提到了-Wall&-g,这非常有用。我们还可以使用此命令编译文件夹中的所有文件:g++*。cppI在您的示例中添加了
cxflags
CXX
Makefile
谢谢Basile!我确实喜欢GNU制作文档来查找特定的东西,但我必须承认,我没有费力地阅读GNU文档,直到第一次阅读了O'Reilly的书。