cul*_*rón 7 symlink makefile gnu-make
我的项目需要几个符号链接.
来自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 $@
Run Code Online (Sandbox Code Playgroud)
但是这条规则每次都试图创建符号链接.(我把-f旗帜放到了ln,所以每次都会重新创建符号链接.)
Mar*_*uhn 15
如果你曾经遇到过这个问题,尽管你的符号链接正确指向现有文件:还要记住,"make"会查看符号链接的目标文件的mtime ,而不是符号链接的mtime本身.
因此,如果调用"ln -s"的规则具有比符号链接指向的文件更新的依赖关系,则"make"必须每次都重新运行该规则中的命令.它会一次又一次地这样做,因为创建指向文件的符号链接不会更新该文件的mtime.
您可以使用"touch"命令来确保链接的目标具有比依赖项更近的mtime.
当然,这可行。Make 将所有内容都视为文件,包括符号链接。它将检查文件是否存在(因为您没有列出任何先决条件,所以没有时间戳比较)。在符号链接的情况下,它实际上检查链接指向的任何内容,当然,而不是链接本身。
您没有显示执行此操作时会发生什么,但根据您的描述,发生了两件事之一:(a) contrib/openlayers 目录不存在,因此 ln 命令生成错误并且不创建符号链接,因此当然,make 会在下次运行时尝试重新创建它,或者(b)您的符号链接创建不正确并且指向任何内容,这意味着当 make 尝试查看它是否存在时会失败,并且 make 将尝试重新创建它。
例如,如果您的src目录是您目录的同级目录contrib,那么您的符号链接就是错误的;你会得到:
contrib/openlayers/theme -> src/openlayers/theme
Run Code Online (Sandbox Code Playgroud)
或者,当内核尝试解决它时:
contrib/openlayers/src/openlayers/theme
Run Code Online (Sandbox Code Playgroud)
这不太可能是你想要的。我建议你使用这样的东西:
contrib/openlayers/theme:
mkdir -p contrib/openlayers
ln -s ../../src/openlayers/theme contrib/openlayers/theme
Run Code Online (Sandbox Code Playgroud)
然后验证符号链接在创建后是否确实指向您想要的位置。
| 归档时间: |
|
| 查看次数: |
8690 次 |
| 最近记录: |