Libsass: facepalm:安装失败,因为 $(PREFIX)/lib 已经存在

创建于 2018-11-12  ·  13评论  ·  资料来源: sass/libsass

安装失败,因为 $(PREFIX)/lib 已经存在

[stephan<strong i="6">@host</strong>:~/cvs/libsass]$ m install PREFIX=$HOME
mkdir /home/stephan/lib
mkdir: cannot create directory ‘/home/stephan/lib’: File exists
Makefile:263: recipe for target '/home/stephan/lib' failed
make: *** [/home/stephan/lib] Error 1

修复方法很简单:使用mkdir -p而不是mkdir

这和#1992一样,但是那张票莫名其妙的被关闭了。

PS:尝试使用自动工具生成的构建时,通过运行autoconfconfigure.ac转换configure ,结果./configure失败,因为:

[stephan<strong i="18">@host</strong>:~/cvs/libsass]$ ./configure --prefix=$HOME
configure: error: cannot find install-sh, install.sh, or shtool in script "."/script

因此,我使用的是检入到树中的 makefile,而不是由 autotools(又名 GNU“Auto,my ass!”工具)生成的 makefile。

所有13条评论

使用 mkdir 多次出现并被拒绝,因为它不是
便携的。 我们对可移植的解决方案持开放态度。

2018 年 11 月 12 日星期一下午 6:55,Stephan Beal < [email protected]写道:

安装失败,因为 $(PREFIX)/lib 已经存在

[ stephan@host :~/cvs/libsass]$ m 安装 PREFIX=$HOME
mkdir /home/stephan/lib
mkdir:无法创建目录“/home/stephan/lib”:文件存在
Makefile:263 : 目标“/home/stephan/lib”的配方失败
制作: * [/home/stephan/lib] 错误 1

修复很简单:使用 mkdir -p 而不是 mkdir。

这与 #1992 https://github.com/sass/libsass/issues/1992相同,
但那张票莫名其妙地关闭了。

PS:尝试使用自动工具生成的构建时,通过运行 autoconf
将 configure.ac 转换为 configure,生成的 ./configure 失败
因为:

[ stephan@host :~/cvs/libsass]$ ./configure --prefix=$HOME
配置:错误:在脚本“.”/script 中找不到 install-sh、install.sh 或 shtool

因此,我使用的是检入到树中的 makefile,而不是
由 autotools 生成的那个(又名 GNU“Auto,我的屁股!”工具)。


您收到此消息是因为您订阅了此线程。
直接回复本邮件,在GitHub上查看
https://github.com/sass/libsass/issues/2727 ,或静音线程
https://github.com/notifications/unsubscribe-auth/AAjZWC46FJREYZk3iPIdWpGiuKuKlkJ4ks5uuSlkgaJpZM4YZIEz
.

当然mkdir -p比根本无法安装在任何平台上更便携?

这是一个便携式解决方案,取自 autotools 手册:

从 libsass 结帐:

autoreconf --install
...
configure.ac:15: installing 'script/install-sh'
...
[stephan<strong i="7">@host</strong>:~/cvs/libsass]$ l ./script/install-sh
-rwxr-xr-x 1 stephan stephan 15155 Nov 12 10:07 ./script/install-sh

该安装脚本是可移植的。 (只需丢弃该文件之外的所有autoreconf输出,然后签入该文件。)

有趣的是,它使用mkdir -p (显然是由 POSIX mkdir 指定的),但它也可以解决各种可移植性问题。

Apropos 可移植性:源代码使用 C++0x,这意味着它是在相对较新的平台(不到 10 年)上编译的。 我敢打赌我的左睾丸所有这些平台都支持mkdir -p

一切都在之前的所有内容中详细解释过多次
关闭的问题。 我们会考虑一个 pr 来解决已经存在的问题
之前被提过。

2018 年 11 月 12 日星期一晚上 8 点 13 分,Stephan Beal < [email protected]写道:

Apropos 可移植性:源代码使用 C++0x,这意味着它是
在相对较新的平台(不到 10 年)上编译。 我敢打赌
我的左睾丸所有这些平台都支持 mkdir -p。


您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/sass/libsass/issues/2727#issuecomment-437808279或静音
线程
https://github.com/notifications/unsubscribe-auth/AAjZWDztL9XVhyClKwxTr7QVoEu2Oie3ks5uuTvQgaJpZM4YZIEz
.

@xzyfer你能链接到已关闭的问题吗? 第1992章不讨论了。

我想阅读讨论以了解不可移植性的声明,因为mkdir -p支持是 POSIX 要求: http :

通过使用autoconf生成的安装脚本 _not_ 解决了什么感知限制(从这里开始展示 4 条评论)? 该项目使用autotools ,因此对工具集支持的平台的可移植性受到限制。 因此,使用autotool's安装脚本是使用提供的 makefile 构建项目的所有平台的最自然和可移植的解决方案。

@sgbeal虽然我仍然找不到问题,但进一步查看 Makefile,它似乎支持 Windows。 在 Windows 上, mkdirmd的别名,它不支持-p

也许发送一个 PR 在 Windows 和非 Windows 上设置不同的MKDIR

@glebm什么是“Windows”?

构建使用 autotools,它“真的应该”使用与 autotools 一起分发的 install-sh。 如果 _that_ 安装程序不够便携,那么使用 autotools 是一个失败的原因。

@sgbeal检入的 Makefile 不是由 autotools 生成的。 这是在 autotools 可能不可用时(例如,为 Ruby 或 Python 的 C 扩展编译时)的另一种构建方式。

在这种情况下,“Windows”是当您有 gcc 和 gmake 但从 CMD 运行它时(而不是例如 Cygwin Bash 或类似的 POSIX 环境)。

无论如何,我认为我的 #2728 PR 解决了这个问题,因为 PR make不应再尝试创建已经存在的目录。

@xzyfer谢谢! 看起来我猜对了,这是专门针对 Windows 兼容性的。 发送 #2728 应该只是阻止make尝试创建已经存在的目录。

@glebm我真诚地道歉:“什么是“Windows””是开玩笑的(自上个千年以来,Windows 就不再是我家中的东西),而不是一个诚实的问题,这在本论坛中没有立足之地。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

xzyfer picture xzyfer  ·  9评论

nex3 picture nex3  ·  9评论

Hint-ru picture Hint-ru  ·  5评论

luiscla27 picture luiscla27  ·  10评论

JohnMica picture JohnMica  ·  3评论