【问题标题】:In Unix, can I run 'make' in a directory without cd'ing to that directory first?在 Unix 中,我可以在一个目录中运行“make”而不先 cd'ing 到那个目录吗?
【发布时间】:2010-10-01 23:49:48
【问题描述】:

在 Unix 中,我可以在一个目录中运行 make 而不先将 cd'ing 到该目录吗?

【问题讨论】:

    标签: linux unix makefile


    【解决方案1】:

    make -C /path/to/dir

    【讨论】:

    • 脾气暴躁——这不是标准的;它必须是 GNU 扩展。既然你说的是 Linux 和 Unix,不清楚你想要哪个,但 -C 选项在 Solaris 10 (/usr/ccs/bin/make)、AIX (/usr/bin/make) 或HP-UX 11.23 (/usr/bin/make)。不过,四分之一还不错。
    • 它也可以在 BSD make 中使用,所以它不仅仅是一个 GNU 扩展。
    • 确保“C”为大写。
    • 或者使用 --directory= 也一样。
    【解决方案2】:

    如其他答案所述,make(1) 对此有一个 -C 选项;几个命令具有相似的选项(例如 tar)。需要注意的是,对于缺少此类选项的其他命令,可以使用以下命令:

    (cd /dir/path && command-to-run)
    

    这将在子 shell 中运行命令,该子 shell 首先更改了其工作目录(同时保留父 shell 的工作目录)。这里使用&& 代替; 来捕获无法更改目录的错误情况。

    【讨论】:

      【解决方案3】:

      如果你不想 cd 到一个目录的原因是因为你需要留在当前目录以完成以后的任务,你可以使用 pushd 和 popd:

      pushd ProjectDir ; make ; popd
      

      进入 ProjectDir,运行 make,然后回到原来的位置。

      【讨论】:

        【解决方案4】:

        你也可以使用:

        make --directory /path/to/dir
        

        【讨论】:

          【解决方案5】:

          制作文件:

          all:
              gcc -Wall -Wpedantic -std=gnu99 -g src/test.c -o build/test
          
          run:
              ./build/test
          

          run:
              ./../build/test
          

          等等

          【讨论】:

          • 答案完全错过了这个问题——它是关于如何调用make,而不是如何编写makefile。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-04
          • 1970-01-01
          • 2014-03-11
          • 2019-08-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多