Linux Makefile and symbolic links
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7027740/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Makefile and symbolic links
提问by hanno
I'm experiencing a strange problem with a makefile. I simply want to set a symbolic link in the makefile but get an error message on one machine (Linux 2.6.18-238.12.1.el5)
I'm experiencing a strange problem with a makefile. I simply want to set a symbolic link in the makefile but get an error message on one machine (Linux 2.6.18-238.12.1.el5)
make: execvp: ln: Too many levels of symbolic links
It works perfectly fine on my MacBook. It also works fine if I execute the same command in the shell. What could go wrong? Are there any environment variables important for ln
?
It works perfectly fine on my MacBook. It also works fine if I execute the same command in the shell. What could go wrong? Are there any environment variables important for ln
?
采纳答案by Nemo
The execvp
in the error message is the key, I think. I believe it is saying there are too many levels of symbolic links while trying to locate the ln command itself.
The execvp
in the error message is the key, I think. I believe it is saying there are too many levels of symbolic links while trying to locate the ln command itself.
Example:
Example:
all:
ln -nsf /tmp/foo /tmp/foo
/tmp/foo/ln x y
Running "make" with this Makefile errors out with:
Running "make" with this Makefile errors out with:
make: execvp: /tmp/foo/ln: Too many levels of symbolic links
So, how is your Makefile invoking ln
, exactly? What is in your PATH
etc.?
So, how is your Makefile invoking ln
, exactly? What is in your PATH
etc.?
[update]
[update]
I bet the Makefile is messing up your PATH. Here is a Makefile that reproduces your exact error message:
I bet the Makefile is messing up your PATH. Here is a Makefile that reproduces your exact error message:
PATH=/tmp/foo
all:
/bin/ln -nsf /tmp/foo /tmp/foo
ln x y