每次将目标文件转储到其他目录时都会重建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的主要内容,如果未能解决你的问题,请参考以下文章