【发布时间】:2010-07-12 07:42:54
【问题描述】:
这有点复杂,所以我上传了一个例子here。
如何测试:
- 下载压缩包并解压
- cd make_problem/make
- make aclean(忘记从存档中删除存档;))
- make alib(将重新创建您刚刚删除的简单而愚蠢的存档)
- ./weird.sh
奇怪的.sh 所做的只是触摸一个源文件,重新制作,触摸另一个源文件,重新制作,几次。
这是我使用 GNU Make 3.81 的 Linux 系统上的输出:
$ ./奇怪的.sh #### 1 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo1.o ../swu/1/src/foo1.c ar cr ../make/libmine.a ../swu/1/src/foo1.o ==== 1 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar1.o ../swu/1/src/bar1.c ar cr ../make/libmine.a ../swu/1/src/bar1.o #### 2 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo2.o ../swu/1/src/foo2.c ==== 2 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar2.o ../swu/1/src/bar2.c #### 3 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo3.o ../swu/1/src/foo3.c ==== 3 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar3.o ../swu/1/src/bar3.c #### 4 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo4.o ../swu/1/src/foo4.c ==== 4 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar4.o ../swu/1/src/bar4.c #### 5 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo5.o ../swu/1/src/foo5.c ==== 5 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar5.o ../swu/1/src/bar5.c #### 6 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo6.o ../swu/1/src/foo6.c ==== 6 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar6.o ../swu/1/src/bar6.c #### 7 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo7.o ../swu/1/src/foo7.c ==== 7 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar7.o ../swu/1/src/bar7.c ar cr ../make/libmine.a ../swu/1/src/bar7.o #### 8 #### gcc -c -g -Wall -Wextra -o ../swu/1/src/foo8.o ../swu/1/src/foo8.c ==== 8 ==== gcc -c -g -Wall -Wextra -o ../swu/1/src/bar8.o ../swu/1/src/bar8.c $现在我希望每次触及源时都会重新构建存档,但这显然没有发生。
谁能解释一下? 并解释如何确保它始终按预期工作?
【问题讨论】:
-
使用 Solaris 10 和 GNU Make 3.80,它实际上似乎可以按预期工作。在 Linux 下,使用 GNU Make 3.80,我得到与上面相同的行为。有人知道 GNU Make 的平台相关问题吗?
-
抱歉,上传的示例乱七八糟。它现在被更干净的版本取代(并且不需要最初的“make aclean”)
-
如果问题被简化为问题中包含的一个小的 makefile 片段,我会赞成这个问题。
标签: gnu-make