繁体   English   中英

隐式模式使用 Unix makefile 编译 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM