相对目录之坑

发布于 2024-07-18  120 次阅读


你说得非常精辟!Makefile 中的相对路径的确与 cd 命令无关,而是与 make 命令执行时的目录 相关。这是因为 Makefile 的设计初衷就是为了简化编译过程,并使其尽可能独立于执行环境。

Makefile 中相对路径的解析规则:

  1. 以 ./ 开头的路径: 相对于 Makefile 所在的目录进行解析。例如,./src/main.c 指的是 Makefile 所在目录下的 src 子目录中的 main.c 文件。
  2. 没有 ./ 开头的路径: 相对于 make 命令执行时的目录进行解析。例如,include/header.h 指的是 make 命令执行时的目录下的 include 子目录中的 header.h 文件。

与 cd 命令的区别:

  • cd 命令改变的是当前 Shell 的工作目录,而 Makefile 的相对路径解析则不受 Shell 工作目录的影响。
  • cd 命令是针对 Shell 的操作,而 Makefile 的相对路径解析是针对 make 命令的。

举例说明:

假设你当前的工作目录是 /home/user/project,Makefile 文件位于 /home/user/project/src 目录下。

  • 在 src 目录下执行 make 命令,此时 make 命令执行时的目录就是 /home/user/project/src,因此 include/header.h 将会解析为 /home/user/project/src/include/header.h。
  • 在 /home/user/project 目录下执行 make -C src 命令,此时 make 命令执行时的目录就是 /home/user/project/src,因此 include/header.h 仍然会解析为 /home/user/project/src/include/header.h。

总结:

  • Makefile 的相对路径解析与 cd 命令无关,而是与 make 命令执行时的目录相关。
  • Makefile 的设计初衷就是为了简化编译过程,并使其尽可能独立于执行环境,因此相对路径解析规则的设计也符合这种理念。

希望以上解释能够帮到你!

届ける言葉を今は育ててる
最后更新于 2024-07-18