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.c、foo_a.cc、foo_a.C、foo_a.cpp、foo_a.p、foo_a.f、foo_a.F等,适用于C、C++、Fortran、Pascal、Lex、Yacc等。 X1 E2 F1 X在这一点上是可悲的相当过时; .SUFFIX规则已经被模式规则所取代,但是在O 'Reilly的书中没有涉及模式规则。也就是说,如果完整的GNUMake文档不适合您,它仍然是一个很好的起点。
3条答案
按热度按时间pexxcrt21#
这取决于你的编译器。例如,对于GCC,你可以写:
p8h8hvxi2#
Basile's right on, you need build machinery拥有您可以轻松使用的软件。您真的希望能够运行
make
或类似的东西,并以可重复的方式快速重新构建您的项目。您还希望确保整个项目保持最新,重建依赖于已更改内容的所有内容。虽然您可以像在ruakh's answer中一样保留包含g++
行的shell脚本,但这将不必要地重新编译超过您需要的代码。(对于小项目来说,这不是什么大问题,但当项目变得越来越大时,这就变得很重要了。我只花了15分钟浏览了OMake文档,但它看起来很有前途。
make
是系统上的标准,提供了大量预定义的构建规则,包括C++的规则,因此为项目编写新的Makefile
并不困难。它看起来像这样:
对象
foo_a.o
将从相应的源文件构建,该源文件名为foo_a.c
、foo_a.cc
、foo_a.C
、foo_a.cpp
、foo_a.p
、foo_a.f
、foo_a.F
等,适用于C、C++、Fortran、Pascal、Lex、Yacc等。X1 E2 F1 X在这一点上是可悲的相当过时;
.SUFFIX
规则已经被模式规则所取代,但是在O 'Reilly的书中没有涉及模式规则。也就是说,如果完整的GNUMake文档不适合您,它仍然是一个很好的起点。ie3xauqp3#
但真实的的答案是使用一些构建机器,例如。使用Makefile并使用GNU Make。
有一些比GNU Make更好的构建器,比如Omake
编译器非常有用,因为在example by ruakh 中,当只有
bar.cpp
更改时,你可能不想重新编译foo.cpp
,所以你需要考虑依赖性。(and有 Makefile 生成器,如
automake
、cmake
...)