如何解决Makefile中通配符函数的顺序是什么
我创建了几个 test*.c 文件
$ ls
Makefile test2.c test3.c test4.c test5.c test6.c test7.c test8.c test9.c
除文件名和功能名称外,所有 test*.c 都具有相同的代码
$ cat test2.c
#include <stdio.h>
int test_2_()
{
return 0;
}
$ cat test3.c
#include <stdio.h>
int test_3_()
{
return 0;
}
$ cat test4.c
#include <stdio.h>
int test_4_()
{
return 0;
}
Makefile 很简单,echo $(src):
$ cat Makefile
src = $(wildcard *.c)
seq:
@echo $(src)
现在,我的问题是通配符的顺序是什么
$ make seq
test2.c test4.c test6.c test3.c test8.c test9.c test5.c test7.c
如果按字母顺序排列,应该是“test2.c test3.c test4.c ...”,但实际上是“test2.c test4.c test6.c test3.c test8.c test9.c” test5.c test7.c" 而且不按照文件更新时间顺序
$ for i in `ls test*`;do echo $i;touch $i;sleep 1;done
test2.c
test3.c
test4.c
test5.c
test6.c
test7.c
test8.c
test9.c
$ make seq
test2.c test4.c test6.c test3.c test8.c test9.c test5.c test7.c
解决方法
在旧版本的 GNU make 中,wildcard
的结果是操作系统在读取目录时返回这些值的顺序。出于所有实际目的,该顺序是随机的。它不是实际上随机的:它有一个顺序,两次运行 make
(没有其他变化)将返回相同的顺序。但是这个顺序并不容易预测:它取决于文件系统的类型和其他事情。对于大多数文件系统,顺序或多或少是文件创建(未更新)的顺序,但即使这样也不一定,因为新文件可以重新使用已删除文件中的空槽。 >
从 GNU make 4.3 开始,wildcard
函数保证按排序顺序(ASCII 顺序,IIRC)返回值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。