有没有一种合理的方法可以通过 configure 和 libtool 传递链接器标志?

Is there a reasonable way to pass linker flags though configure and libtool?

提问人:Tomeamis 提问时间:11/8/2022 更新时间:11/9/2022 访问量:484

问:

上下文:我正在尝试交叉构建一个使用 autotools 并使用 clang 的库 (curl),这几乎需要所有内容的标志。我设置了环境变量,包括、等,运行。目前为止,一切都好。libtool-targetCCCFLAGSLDFLAGS./confgigure

然后我这样做了,链接失败了,因为删除了(除其他外)选项。 甚至有一个关于这个问题的FAQ条目,其中指出要解决这个问题,我应该使用诸如.果然,当我运行带有必要选项前缀的命令时,它会起作用。除非我把它放进去,否则脚本会失败,因为它在没有 的情况下编译其测试,然后由于命令行格式不正确而失败。makelibtool-targetlibtool-Xcompilerlibtool-XCClinkerLDFLAGSconfigurelibtool

我最终只是打了补丁,只留下未知的标志,但是有没有一种理智的方法来传递这些标志,以便它们在两者和香草中都可以工作?libtoolconfigurelibtool

我在 SO 上发现的唯一类似问题是这个问题,但这是关于剥离更多用于链接的标志,而不是更少。

自动工具 libtool

评论


答:

1赞 John Bollinger 11/9/2022 #1

我设置了环境变量,包括 CC、CFLAGS、LDFLAGS 等,运行 ./confgigure。目前为止,一切都好。

不一定。可以在 的环境中传递这些变量和其他一些环境变量。如果你这样做了,它会记住你这样做了,它会使用它们,并提供使用它们。但是,您应该只在必要时和范围内这样做。SOP是 ,可能后面跟着 。configuremake./configure; makesudo make install

我最终只是打了补丁,只留下未知的标志,但是有没有一种理智的方法来传递这些标志,以便它们在两者和香草中都可以工作?libtoolconfigurelibtool

当您确实需要 etc 时,它们不一定必须指定为 。它们也可以直接指定给 ,如果你需要避免在测试期间使用它们,那么这正是你应该做的。例如LDFLAGSconfiguremakeconfigure

./configure
make LDFLAGS="-XCClinker -target ..."

这有点不方便,因为每次运行时都需要指定标志,但如果您只是想构建软件,而不是开发它,那么这没什么大不了的。make

如果您正在尝试开发软件,那么您可以针对 Mac 进行构建系统测试,或者直接测试是否需要额外的标志,并自行提供它们。这将产生最流畅的体验。但我几乎不指望任何只想执行一次性构建的人在别人的包中设置它。

评论

0赞 Tomeamis 11/9/2022
我确实尝试为 指定 LDFLAGS,但只能通过前缀来设置环境。既然你指出了这一点,我很快就找到了手册的一部分,它说将它们指定为参数实际上会禁止对 Makefile 中这些变量的赋值。非常感谢!makemakemake