在我目前的计算机科学项目中,我不得不使用大量的类和类文件来帮助分解程序的巨大负担。但是,我想创建一个能够编译依赖项的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
?
答案 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具有默认定义的内置规则)