如何检查make中是否存在目录并创建它

时间:2012-09-26 15:19:51

标签: file compilation makefile

在我的项目目录中,我有一些子目录:code/export/docs/object/make所做的只是编译代码目录中的所有文件,并将.o文件放入对象目录中。

问题是,我告诉git忽略所有的.o文件,因为我不想让它们上传,所以它也不会跟踪对象目录。我真的很好,我也不希望object/上传到我的GitHub帐户,但是使用当前的解决方案(这是{{1}中的一个简单的空文本文件} dir),目录确实上传,并且需要在构建之前出现(makefile只是假定它在那里)。

这看起来并不是最好的解决方案,所以有没有办法检查一个目录在构建make文件之前是否存在,如果是这样的话就创建它?这将允许在调用make命令时不存在对象目录,并在之后创建。

3 个答案:

答案 0 :(得分:14)

只要有一个目标:

object/%.o: code/%.cc object
    compile $< somehow...

object:
    mkdir $@

如果你想要防止一个名为“对象”的文件的可能性,你必须要小心一点,但这是基本的想法。

答案 1 :(得分:13)

执行此操作的唯一正确方法是使用仅订购先决条件,请参阅:https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html。请注意代码段中的 |

如果您不使用仅订购先决条件,则该目录中的每次修改(例如,复制或创建文件)都会再次触发依赖的规则在目录创建目标上!

object/%.o: code/%.cc | object
    compile $< somehow...

object:
    mkdir -p $@

答案 2 :(得分:11)

在目标中插入mkdir命令。

object/%.o : code/%.cc
    @mkdir -p object
    compile $< somehow...

&#39; -p&#39;如果目录已经存在,则不会导致错误。