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

标签 makefile

我正在尝试使用makefile,我的问题是我有一个目录,其中包含src目录和Makefile。我还使用了tmp目录,这也是我必须创建的目录。
它具有目标文件。为了提高性能,我尝试在调试时不要删除它们。
如果我创建了一个tmp规则来创建它,它将始终重建所有C文件。
那么该怎么做呢?

最佳答案

有很多方法。这取决于您使用的make版本和所使用的操作系统。

您永远不要做的一件事就是使用目录作为简单的先决条件。文件系统用于更新目录修改时间的规则不适用于make

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

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

如果您拥有GNU,则有两种选择。最简单的方法是通过添加如下行,强制在读取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的时间戳。

关于makefile - 如果需要,如何创建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344719/

相关文章:

c++ - GCC 不链接静态库依赖(makefile)

if-statement - 如果两个 shell 变量的状态是某个状态,则从 make 文件中退出

netbeans - 为什么 Netbeans 提示我的 GNUmakefile?

c++ - MinGW 无法编译,错误 1

makefile - 使用 'make run' 执行

makefile - 如何诊断 "Entering an unknown directory"

c - 即使源代码和编译器标志未修改,是什么导致目标文件在编译之间有所不同?

c++ - 在 Mac 上安装 Poco

编译错误 fatal error : sys\types. h : No such file or directory #include <sys\types. h>

c++ - 从构建配置创建 Makefile