在我的项目目录中,我有一些子目录:code/
,export/
,docs/
和object/
。 make
所做的只是编译代码目录中的所有文件,并将.o文件放入对象目录中。
问题是,我告诉git忽略所有的.o文件,因为我不想让它们上传,所以它也不会跟踪对象目录。我真的很好,我也不希望object/
上传到我的GitHub帐户,但是使用当前的解决方案(这是{{1}中的一个简单的空文本文件} dir),目录确实上传,并且需要在构建之前出现(makefile只是假定它在那里)。
这看起来并不是最好的解决方案,所以有没有办法检查一个目录在构建make文件之前是否存在,如果是这样的话就创建它?这将允许在调用make命令时不存在对象目录,并在之后创建。
答案 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;如果目录已经存在,则不会导致错误。