[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:尝试使用自动工具生成的构建时,通过运行autoconf
将configure.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。
使用 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 上, mkdir
是md
的别名,它不支持-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 就不再是我家中的东西),而不是一个诚实的问题,这在本论坛中没有立足之地。