每次将目标文件转储到其他目录时都会重建makefile

Posted

技术标签:

【中文标题】每次将目标文件转储到其他目录时都会重建makefile【英文标题】:makefile rebuilding everytime when object file dumped in other dir 【发布时间】:2016-06-06 11:05:25 【问题描述】:

我有一个 makefile,每次我编译时它都会不断重建 c++ 源代码。我发现原因是我将目标文件转储到单独的目录中。 make 文件中的一行是:

$(CPP_COMPILER) $(COMPILE_FLAGS) $(RELEASE_OPT_FLAGS) -c Test.cpp $(INCLUDE_PATH) -o objfiles/$(OUTDIR)/Test.o

我可以设置一些规则,首先检查这个目录(objfiles),如果不需要,不要每次都重新构建源代码?

感谢您的帮助。

【问题讨论】:

如果您的Makefile 正确,您所要求的是精确 Make 如何开箱即用。您没有向我们展示整个文件,因此我们无法为您解决问题;但根据您的描述,您对此目标的依赖关系未正确声明。 【参考方案1】:

你应该让规则本身引用正确的路径:

objfiles/$(OUTDIR)/Test.o: Test.cpp
  $(CPP_COMPILER) $(COMPILE_FLAGS) $(RELEASE_OPT_FLAGS) -c Test.cpp $(INCLUDE_PATH) -o objfiles/$(OUTDIR)/Test.o

如果您仍然希望Test.o 作为 makefile 目标,您可以轻松添加一个:

Test.o: objfiles/$(OUTDIR)/Test.o

【讨论】:

感谢您的评论。但在此之后,我陷入了另一个问题。所以 $(OUTDIR) 是我创建如下的变量 - GCC_VERSION=gcc --version| cut -d " " -f 3|head -1 OUTDIR=gcc_$(GCC_VERSION)_$(PLATFORM) 现在当我尝试在目标中使用它时。大喊几个错误。 @user888270:您正在尝试同时解决多个问题; 分而治之。在您尝试在命令中使用该变量之前,请验证它是否具有您认为的值,并且您打算使用的目录确实存在。

以上是关于每次将目标文件转储到其他目录时都会重建makefile的主要内容,如果未能解决你的问题,请参考以下文章

每次上传新文件时都会出现 403 禁止错误

Pi计算器程序每次运行时都会提供不同的输出

为啥这个函数每次运行时都会将对象两次附加到数组中?

每次调用 Func 时都会重写 UIView

分段错误:从文件访问 csv 记录时核心转储

AppWidgetProvider - 每次对任何 AppWidget 文件进行更改时都会触发 onUpdate 吗?