Makefile-如何保存.o一个目录?

Makefile-如何保存.o一个目录?,makefile,Makefile,设想以下文件夹结构: 计划 src 代码c 生成文件 垃圾箱 如何将code.c编译成code.o并直接放入bin中?我知道我可以在src和do“mv code.o../bin”下将其编译为code.o,但如果存在编译错误,则会产生错误,对吗?即使这样,还有更好的方法吗 谢谢。您可以尝试移动,但只有在使用&&编译成功时: code.o: code.c code.h g++ -c code.c && mv code.o ../ mv code.o../仅在g+

设想以下文件夹结构:

  • 计划
    • src
      • 代码c
      • 生成文件
    • 垃圾箱
如何将code.c编译成code.o并直接放入bin中?我知道我可以在src和do“mv code.o../bin”下将其编译为code.o,但如果存在编译错误,则会产生错误,对吗?即使这样,还有更好的方法吗


谢谢。

您可以尝试移动,但只有在使用
&&
编译成功时:

code.o: code.c code.h
    g++ -c code.c && mv code.o ../

mv code.o../
仅在
g++
返回0时执行,此时编译成功。如果您有非常复杂的
makefile
,这可能不适合您,但我想我会与您分享我所知道的。

您仍然可以使用move方法并在编译器错误中生存:

cc -c code.c && mv code.o ../bin

如果“cc”部分出现故障,则不会运行“mv”部分。

根据您的意思,该过程应该或不应该“产生错误”。如果有编译器错误,您就会知道

也就是说,使用make有几种方法。在这种情况下,最好的可能是:

  • 您可以将Makefile放入bin。Make擅长使用那里的文件在这里生成文件,但不是相反。
  • 您可以在makefile目标中指定目标路径: $(MAIN_DIR)/bin/%.o: %.c $(COMPILE)... $(主目录)/bin/%.o:%.c $(编译)。。。
      有点晚了,但如果有帮助的话。 这就是如何从makefile所在的位置获取上一级目录路径

      $(subst $(notdir $(CURDIR)),,$(CURDIR))
      
      如果您的项目是这样的:

      ~/myProject/
          src/
              Makefile
              #all the .c and .cpp
          bin/
              #where you want to put the binaries.
      
      $(CURDIR)将输出~/myProject/src


      $(subst$(notdir$(CURDIR)),$(CURDIR))将输出~/myProject

      更好的方法是不要使用痛苦无比的
      make
      。你也可以使用
      。/bin/.o:%.c
      作为Makefile中的模式规则,这样你就可以避免显式的
      $(MAIN\u DIR)
      变量。@Dale Hagglund:我想到了这一点,但是它使Makefile变得不那么灵活。例如,您不能将其移动到其他目录。这是正确的。在较大的makefile系统中,我通常会在树的顶部找到一个
      rules.mk
      文件,它包含在较低级别的makefiles中
      rules.mk
      将包含这样的模式规则。当然,实际的makefile仍然不是严格位置独立的,因为如果复制它们,我必须编辑必要的include路径。@Dale Hagglund:可以通过在include指令中使用绝对路径而不是相对路径,或者在运行make时使用-I选项,使较低级别的makefile(在某种程度上)可移动,告诉它去哪里找。