我正在使用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标准的一部分吗? (例如重命名后更新时间戳,或为重命名定义新时间戳)
答案 0 :(得分:2)
您可以运行
重命名后的touch <filename>
。这应该更新修改时间戳。
EDIT :实现所需目标的另一种方法是拥有两个文件define1.h
和define2.h
并根据要决定哪个make的要求向make命令添加一个参数哪一个。
您可以像这样运行make:make target DEFINEH=1
或make 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
这样,您将永远不会忘记触摸文件。