如果需要,如何创建目录?

时间:2013-05-02 18:02:15

标签: makefile

我正在尝试使用makefile,我的问题是我有一个目录,src目录和Makefile。我还使用了tmp目录,我也必须创建它。 它有目标文件。为了性能,我尝试在调试时不删除它们。 如果我为tmp创建一个规则来创建它,它总是会重建所有C文件。 那怎么做呢?

1 个答案:

答案 0 :(得分:9)

有很多方法。这取决于您使用的make版本以及您正在使用的操作系统。

您必须做的一件事是使用目录作为简单的先决条件。文件系统用于更新目录上修改时间的规则与make不兼容。

对于POSIX系统上的简单make,您可以在规则中预先创建目录以执行编译:

obj/foo.o: foo.c
        @ mdkir -p obj
        $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

如果你有GNU make,你有两个选择。最简单的方法就是在通过添加如下所示的行之前,在读取makefile之前强制创建目录:

_dummy := $(shell mkdir -p obj)

简单,快速,可靠。唯一的缺点是,即使不需要,也会始终创建目录。然而,这是我通常这样做的方式。

最花哨的方式,如果你有足够新的GNU make,就是使用仅限订单的先决条件:

obj/foo.o: foo.c | obj
        $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

obj:
        mkdir -p $@

这会强制obj目标在obj/foo.o目标之前构建,但是在确定obj时是否会忽略obj/foo.o上的时间戳已经过时了。