m4 - 执行 shell 命令

发布于 2024-10-10 13:15:58 字数 351 浏览 6 评论 0原文

我是 m4 的新手,正在尝试设置一个宏,该宏允许用户在配置时指定库的位置 ./configure --with-mylib=/path/to/lib.so< /代码>。

在使用 AC_ARG_WITH 的 m4 宏中,我将检查给定文件是否确实存在,然后存储该库的路径。 MYLIB_PATH=esyscmd([dirname $withval])。这会产生错误:

dirname: missing operand

shell 似乎不知道 $withval。我该如何让它执行这个命令?

谢谢,

安德鲁

I'm new to m4 and am trying to set up a macro which allows the user to specify the location of a library at configure-time ./configure --with-mylib=/path/to/lib.so.

In the m4 macro using AC_ARG_WITH, I'll check that the given file actually exists, and then store the path to said lib. MYLIB_PATH=esyscmd([dirname $withval]). This produces the error:

dirname: missing operand

The shell doesn't seem to know about $withval. How do I get it through to execute this command?

Thanks,

Andrew

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只等公子 2024-10-17 13:15:58

这是因为 esyscmd 是在生成 configure 脚本时(即“编译时”)由 m4 执行的。 代替使用

MYLIB_PATH=`dirname $with_mylib`

请注意,$withval“实际上只是名为 with_package 的 shell 变量的值,package 中的任何非字母数字字符都更改为 _” ,因此所有出现的 / 都将被删除,并且它可能不是有效的路径。

That's because esyscmd is executed by m4 when generating your configure script, i.e. at "compile time". Use

MYLIB_PATH=`dirname $with_mylib`

instead.

Note that $withval "is actually just the value of the shell variable named with_package, with any non-alphanumeric characters in package changed into _", so all occurrences of / will be removed and it will likely not be a valid path.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文