我的项目需要几个符号链接。
从src/openlayers
img
,文件夹theme
和contrib/openlayers
必须在contrib/openlayers
中进行符号链接。还应自动创建.PHONY: run
run: contrib/openlayers/theme contrib/openlayers/img
../bin/pserve development.ini --reload
contrib/openlayers/theme:
ln -s src/openlayers/theme $@
contrib/openlayers/img:
ln -s src/openlayers/img $@
文件夹。
-f
但是这条规则每次都会尝试创建符号链接。 (我将ln
标记放到{{1}},因此每次都会重新创建符号链接。)
答案 0 :(得分:14)
如果您的符号链接正确指向现有文件,您遇到此问题:还要记住“make”查看符号链接的目标文件的mtime,而不是< / em>在符号链接本身的mtime。
因此,如果调用“ln -s”的规则具有 newer 的依赖关系,而不是符号链接指向的文件,则“make”必须重新运行该规则中的命令时间。它会一次又一次地这样做,因为创建指向文件的符号链接不会更新该文件的mtime。
您可以使用“触摸”命令确保链接的目标具有比您的依赖项更新的mtime。
答案 1 :(得分:3)
当然,这可行。 Make将所有内容都视为文件,包括符号链接。它将检查文件是否存在(因为您没有列出任何先决条件,所以没有时间戳比较)。在符号链接的情况下,它确实检查链接指向的内容,当然,不是链接本身。
您没有显示执行此操作时会发生什么,但根据您的描述,发生以下两种情况之一:(a)contrib / openlayers目录不存在,因此ln命令生成错误而不创建符号链接当然make会在下次运行时尝试重新创建它,或者(b)你的符号链接被错误地创建并且指向什么都没有,这意味着当make尝试查看它是否存在时它会失败并且make会尝试重新创建它
例如,如果您的src
目录是contrib
目录的兄弟,那么您的符号链接是错误的;你会得到:
contrib/openlayers/theme -> src/openlayers/theme
或者,当内核尝试解决它时:
contrib/openlayers/src/openlayers/theme
这不太可能是你想要的。我建议你使用这样的东西:
contrib/openlayers/theme:
mkdir -p contrib/openlayers
ln -s ../../src/openlayers/theme contrib/openlayers/theme
然后验证符号链接一旦创建,就会实际指向您想要的位置。