[英]Implicit Patter use of Unix makefile for compiling C++
嗨,我正在尝试学习如何使用 gnu makefile 并尝试在此 makefile 中使用隐式模式来编译我的 C++ 脚本:
CXX=g++
init : init.o
$(CXX) -o $@ $<
init.o : init.cpp
$(CXX) -c $<
这个make init
的输出是:init.o(目标文件)和 init(可执行文件)。
然后我尝试添加模式规则:
CXX=g++
% : %.o
$(CXX) -o $@ $<
%.o : %.cpp
$(CXX) -c $<
但是这个makefile只输出init(可执行)文件,为什么我遗漏了什么?
你真的应该剪切和粘贴(请不要截图)你输入的命令和你在寻求帮助时得到的输出,如果不明显,请解释错误的输出部分。
我怀疑如果您查看 make 的输出,您会看到它正在运行rm init.o
,这解释了为什么.o
文件不存在。
这是由于 GNU make 的中间文件删除功能。 因为.o
未在您的 makefile 中的其他任何地方引用,所以 make 决定它不是正确运行所真正需要的,并将其删除。
第一个问题是,这对你来说真的是个问题吗? 您需要保留.o
文件吗? 做什么的?
第二件事是您不需要自己定义这些模式规则。 GNU make 具有内置规则,知道如何从具有相同前缀名称的源文件创建可执行文件。
您的整个 makefile 可能只是:
CXX = g++
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.