使用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 已经默认定义了内置规则)
在我当前的计算机科学项目中,我不得不使用大量 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 已经默认定义了内置规则)