File 如何检查目录是否不存在';不存在于制造和创造之中
在我的项目目录中,我有一些子目录:File 如何检查目录是否不存在';不存在于制造和创造之中,file,compilation,makefile,File,Compilation,Makefile,在我的项目目录中,我有一些子目录:code/、export/、docs/和object/。make只需从代码目录编译所有文件,并将.o文件放入对象目录 问题是,我告诉git忽略所有的.o文件,因为我不想上传它们,所以它也不会跟踪对象目录。实际上我对此没有意见,我不想将对象/也上传到我的GitHub帐户,但是对于当前的解决方案(在对象/目录中是一个简单的空文本文件),目录确实会被上传,并且需要在构建之前存在(生成文件只是假设它在那里) 这看起来并不是最好的解决方案,那么有没有办法在生成文件之前检查
code/
、export/
、docs/
和object/
。make
只需从代码目录编译所有文件,并将.o文件放入对象目录
问题是,我告诉git忽略所有的.o文件,因为我不想上传它们,所以它也不会跟踪对象目录。实际上我对此没有意见,我不想将对象/
也上传到我的GitHub帐户,但是对于当前的解决方案(在对象/
目录中是一个简单的空文本文件),目录确实会被上传,并且需要在构建之前存在(生成文件只是假设它在那里)
这看起来并不是最好的解决方案,那么有没有办法在生成文件之前检查目录是否不存在,如果存在,就创建它?这将允许在调用make命令并随后创建时,对象目录不存在。只需为其设置一个目标:
object/%.o: code/%.cc object
compile $< somehow...
object:
mkdir $@
object/%.o:code/%.cc对象
编译$<。。。
对象:
mkdir$@
如果要防止出现名为“object”的文件,您必须更加小心,但这是基本思想。在目标中插入mkdir命令
object/%.o : code/%.cc
@mkdir -p object
compile $< somehow...
object/%.o:code/%.cc
@mkdir-p对象
编译$<。。。
如果目录已经存在,'-p'不会导致错误。唯一正确的方法是使用仅订购的先决条件,请参阅:。请注意代码段中的| 如果不使用order only先决条件,则该目录中的每次修改(例如处理或创建文件)都将触发再次依赖于目录创建目标的规则
object/%.o: code/%.cc | object
compile $< somehow...
object:
mkdir -p $@
object/%.o:code/%.cc | object
编译$<。。。
对象:
mkdir-p$@
通常最好使用仅限订单的先决条件(即使用code/%.cc | object
),这样object
就不会影响$^
@Idelic:night技巧,我不知道$^
不包括仅限订单的preq。谢谢例如,我不能有一个名为“debug”的目标和一个名为“debug”的文件夹。这并不能像预期的那样工作,因为对象目录的时间戳将在添加任何对象时发生更改。看到另一个答案了吗?很好!这样,它就可以在还不存在的情况下创建,而不是在每次执行规则时(对于每个对象文件)都尝试创建,但效果不太理想:每次都派生一个shell进程,而不是在需要时。