构建时自动创建目录

时间:2011-02-22 07:34:25

标签: c git mercurial makefile

我有一个用C编写的项目,我正在使用mercurial(我也可以使用git)进行版本控制,GNU make用于构建。该项目包括几个用于构建时生成文件的空目录,例如依赖项makefile和目标文件。

但是,当我签出项目时,不会创建空目录(版本控制系统会忽略它们),并且构建失败。

我想到的唯一补救措施是在项目的58个makefile中的每个配方中添加一个mkdir -p指令(它非常大)。除了大量修改外,mkdir -p GNU手册中不鼓励makemake的其他版本不兼容。

有没有更明智的方法来解决这个问题?

3 个答案:

答案 0 :(得分:3)

git和Mercurial都跟踪文件,而不是目录,因此不会存储空目录。

常见的技巧是将空文件添加到您需要的目录中,例如:

touch output/.empty

然后将其添加到存储库。

答案 1 :(得分:3)

你可以:

output/%: output/.empty

output/.empty:
        $(MKDIR_P) output
        touch output/.empty
makefile中的

output中的所有文件都将依赖于创建目录而不单独修改每个规则。

大多数系统的$(MKDIR_P)定义(mkdir -p或不起作用的特殊脚本)可以通过配置脚本(例如使用AC_PROG_MKDIR_P的autoconf)或条件设置提供。生成文件。

答案 2 :(得分:1)

正如你所提到的,你也可以使用git,也许你会感兴趣的是bazaar可以跟文件一样跟踪目录。我不知道这是否适合您,只是说。