m4 - 执行 shell 命令
我是 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为
esyscmd
是在生成configure
脚本时(即“编译时”)由m4
执行的。 代替使用。
请注意,$withval“实际上只是名为
with_package
的 shell 变量的值,package 中的任何非字母数字字符都更改为_
” ,因此所有出现的/
都将被删除,并且它可能不是有效的路径。That's because
esyscmd
is executed bym4
when generating yourconfigure
script, i.e. at "compile time". Useinstead.
Note that
$withval
"is actually just the value of the shell variable namedwith_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.