Makefile中通配符函数的顺序是什么
What is the sequence of wildcard function in Makefile
我创建了几个测试*.c 文件
$ ls
Makefile test2.c test3.c test4.c test5.c test6.c test7.c test8.c test9.c
除文件名和函数名外,所有测试*.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.ctest3.ctest8.ctest9.ctest5.ctest7.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
的结果是操作系统 return 读取目录时这些值的顺序。该顺序出于所有实际目的是随机的。它不是 实际上 随机的:它有一个顺序,并且 make
的两次运行(没有其他更改)将 return 相同的顺序。但是这个顺序不容易预测:它取决于文件系统的类型和其他因素。对于大多数文件系统,顺序或多或少是 创建文件的顺序 (未更新)但即使这样也并不总是确定的,因为新文件可以重新使用已删除文件的空槽.
从 GNU make 4.3 开始,wildcard
函数保证 return 值按排序顺序(ASCII 顺序,IIRC)。
我创建了几个测试*.c 文件
$ ls
Makefile test2.c test3.c test4.c test5.c test6.c test7.c test8.c test9.c
除文件名和函数名外,所有测试*.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.ctest3.ctest8.ctest9.ctest5.ctest7.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
的结果是操作系统 return 读取目录时这些值的顺序。该顺序出于所有实际目的是随机的。它不是 实际上 随机的:它有一个顺序,并且 make
的两次运行(没有其他更改)将 return 相同的顺序。但是这个顺序不容易预测:它取决于文件系统的类型和其他因素。对于大多数文件系统,顺序或多或少是 创建文件的顺序 (未更新)但即使这样也并不总是确定的,因为新文件可以重新使用已删除文件的空槽.
从 GNU make 4.3 开始,wildcard
函数保证 return 值按排序顺序(ASCII 顺序,IIRC)。