作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于 C 头文件,您可以防止多个头文件包含,例如:
#ifndef MY_FOO_H
#define MY_FOO_H
[...]
#endif
我怎样才能在 m4 中做同样的事情,使得对同一个文件的多个 include()
宏调用只会导致内容被包含一次?
具体来说,我想做一个涉及使用宏 changequote
的 ifdef 保护(我不会用 dnl
弄乱我的代码):
最初,当我执行以下操作时,多个包含仍然会破坏引号:
changequote_file.m4:
ifdef(my_foo_m4,,define(my_foo_m4,1)
changequote([,])
)
changequote_invocation.m4:
include(changequote_file.m4)
After first include invocation:
[I should not have brackets around me]
`I should have normal m4 quotes around me'
include(changequote_file.m4)
After second include invocation:
[I should not have brackets around me]
`I should have normal m4 quotes around me'
使用 m4 changequote_invocation.m4
调用产生:
After first include invocation:
I should not have brackets around me
`I should have normal m4 quotes around me'
After second include invocation:
[I should not have brackets around me]
`I should have normal m4 quotes around me'
最佳答案
最直接的方法是cpp
版本的几乎直译:
ifdef(`my_foo_m4',,`define(`my_foo_m4',1)dnl
(rest of file here)
')dnl
因此,如果定义了 my_foo_m4
,则文件将展开为空,否则将评估其内容。
关于m4 - 如何为 m4 宏文件包含 ifdef 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346397/
我是一名优秀的程序员,十分优秀!