使用make命令编译类文件

时间:2017-11-17 06:57:23

标签: c++ makefile gnu

在我目前的计算机科学项目中,我不得不使用大量的类和类文件来帮助分解程序的巨大负担。但是,我想创建一个能够编译依赖项的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

1 个答案:

答案 0 :(得分:1)

为了做你想做的事,你必须列出所有*.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具有默认定义的内置规则)