如何处理makefile中依赖项的重命名操作?

时间:2019-04-05 19:37:00

标签: c++ makefile

我正在使用make命令在Linux上构建一个简单的C ++应用程序。我想用在两个不同的头文件中定义的不同信息集测试我的代码:define.h和define.hh。

“ define.h”是我的构建系统中唯一使用的一个,并且依赖项已正确定义。

当我编辑“ define.h”时,make会重建项目。

当我使用终端交换“ define.h”和“ define.hh”的名称时,make无需重新构建。

main.cpp:

#include "define.h"
#include <iostream>
int main()
{
    std::cout << MSG << std::endl;
}

define.h:

#define MSG "1"

define.hh:

#define MSG "2"

makefile:

CPPFLAGS:=-g
LDLIBS:=-lstdc++

main: main.o

main.o: main.cpp define.h

使用VSCode GUI交换“ define.h”和“ define.hh”的名称后,make重建项目。

似乎在终端中重命名文件不会更新其时间戳,但是VSCode在重命名操作后会更新时间戳。

是否可以在我的makefile文件中处理这种情况?

我们应该期望make在将来变得更智能并处理这种情况吗? (例如有关文件节点的兑现信息)

这应该成为OS标准的一部分吗? (例如重命名后更新时间戳,或为重命名定义新时间戳)

1 个答案:

答案 0 :(得分:2)

您可以运行 重命名后的touch <filename>。这应该更新修改时间戳。

EDIT :实现所需目标的另一种方法是拥有两个文件define1.hdefine2.h并根据要决定哪个make的要求向make命令添加一个参数哪一个。 您可以像这样运行make:make target DEFINEH=1make target DEFINEH=2 并在您的makefile中:

ifeq ($(DEFINEH),1) cp define1.h define.h touch define.h else ifeq ($(DEFINEH),2) cp define2.h define.h touch define.h endif

这样,您将永远不会忘记触摸文件。