我正在尝试使用makefile,我的问题是我有一个目录,一个src目录和一个Makefile.我还使用了一个tmp我也必须创建的目录.它有目标文件.为了性能,我尝试在调试时不删除它们.如果我为tmp创建一个规则来创建它,它总是会重建所有C文件.那怎么做?
Mad*_*ist 11
有很多方法.这取决于make您使用的是什么版本以及您正在使用的操作系统.
你必须做的一件事是使用一个目录作为一个简单的先决条件.文件系统用于更新目录上的修改时间的规则不能很好地使用make.
对于makePOSIX系统上的简单,您可以在规则中预先创建目录以执行编译:
obj/foo.o: foo.c
@ mdkir -p obj
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)
如果你有GNU make,你有两个选择.最简单的方法就是在通过添加如下所示的行之前,在读取makefile之前强制创建目录.
_dummy := $(shell mkdir -p obj)
Run Code Online (Sandbox Code Playgroud)
简单,快速,可靠.它唯一的缺点是,即使不需要,也会始终创建目录.然而,这是我通常这样做的方式.
如果你有一个足够新的GNU make,那么最奇特的方法是使用仅限订单的先决条件:
obj/foo.o: foo.c | obj
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
obj:
mkdir -p $@
Run Code Online (Sandbox Code Playgroud)
这会强制在obj目标之前构建obj/foo.o目标,但obj在确定是否obj/foo.o过期时会忽略时间戳.
| 归档时间: |
|
| 查看次数: |
3133 次 |
| 最近记录: |