使用make命令编译class个文件

Using the make command to compile class files

在我当前的计算机科学项目中,我不得不使用大量 classes 和 class 文件来帮助分担程序的巨大负载。但是,我想创建一个 makefile,它能够在不使用中间“.o”步骤的情况下编译依赖项。 我已经有:

%: %.cpp
    g++ -std=c++11 $< -o $@

是的,我必须使用 c++11,而不是 14 或 17。 但是有没有办法让我可以写 make foo.cpp bar.cpp 并拥有它 运行 g++ -std=c++11 foo.cpp bar.cpp -o foo?

为了做你想做的事,你必须将所有 *.cpp 文件列为 foo 的依赖项,然后做 make foo(或 foo 作为 Makefile 中的第一个目标)来编译它。

foo: foo.cpp bar.cpp
    g++ -std=c++11 $^ -o $@

$^代表所有先决条件。

但是,您为什么不想使用中间步骤?这样做,每次任何源文件更改时,您都将重新编译并重新链接整个项目。使用 *.o 可以避免 :

foo: foo.o bar.o
    g++ -std=c++11 $^ -o $@

%.o: %.cpp
    g++ -std=c++11 $< -o $@

这样你就可以避免不必要的重新编译。

(您也可以省略 %.o 规则,因为 make 已经默认定义了内置规则)