我有一个用C
编写的项目,我正在使用mercurial
(我也可以使用git
)进行版本控制,GNU
make
用于构建。该项目包括几个用于构建时生成文件的空目录,例如依赖项makefile和目标文件。
但是,当我签出项目时,不会创建空目录(版本控制系统会忽略它们),并且构建失败。
我想到的唯一补救措施是在项目的58个makefile中的每个配方中添加一个mkdir -p
指令(它非常大)。除了大量修改外,mkdir -p
GNU
手册中不鼓励make
与make
的其他版本不兼容。
有没有更明智的方法来解决这个问题?
答案 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可以跟文件一样跟踪目录。我不知道这是否适合您,只是说。