提问人:Jeff 提问时间:8/12/2013 最后编辑:Jeff 更新时间:8/15/2013 访问量:968
如何定义编译时-D宏(Apache 2.2)?
How to define compile-time -D macros (Apache 2.2)?
问:
在编译 Apache 源代码时,我已经能够很好地定义一个宏:
# export CFLAGS=" -DSINGLE_LISTEN_UNSERIALIZED_ACCEPT" // OR even:
# export CFLAGS=" -DSINGLE_LISTEN_UNSERIALIZED_ACCEPT=1"
...就像一个魅力,但是每次我尝试设置时:
# export CFLAGS=" -DDEFAULT_PIDLOG=/var/run/apache/apache.pid"
我在以下情况下收到此错误:make
prefork.c: In function ‘prefork_pre_config’:
prefork.c:1340:20: error: expected expression before ‘/’ token
make[4]: *** [prefork.lo] Error 1
因此,我尝试转义DEFAULT_PIDLOG值的正斜杠和不同的引用技术,但它总是失败,显然是因为值中的正斜杠。
答:
0赞
Smirno
8/13/2013
#1
DEFAULT_PIDLOG
应定义一个常量 C 字符串。尝试使用 export CFLAGS=“ -DDEFAULT_PIDLOG=\\”/var/run/apache/apache.pid\\”
评论
0赞
Jeff
8/13/2013
导出结束时是否缺少报价?我还没有尝试过这个,但上面 mathk 的评论似乎有效(希望编译时间不长!如果你想在你的答案中加入他的评论,我会把它标记为正确并继续这一天。
0赞
Jeff
8/13/2013
跟进:在 Smirno 的导出命令末尾添加另一个引号是错误的,所以我假设答案是正确的。
0赞
alk
8/13/2013
@Jeff:我想说的是肯定缺少一个引号。此外,如何引用和如何逃生可能在很大程度上取决于所使用的外壳。例如,你会做: .相同。bash
CFLAGS=-DDEFAULT_PIDLOG=\"/var/run/apache/apache.pid\"
ksh
0赞
Jeff
8/13/2013
@alk,我尝试了确切的引用方案,它在我的问题(bash shell)中给了我同样的错误。只有上面 mathk 评论中的“三引号”有效。
0赞
alk
8/13/2013
@Jeff:那你为什么会接受一个错误的答案,就像这里的这个答案一样?
2赞
Jeff
8/15/2013
#2
似乎DEFAULT_PIDLOG应该定义一个常量 C 字符串。试用
export CFLAGS="-DDEFAULT_PIDLOG=\\\"/var/run/apache/apache.pid\\\""
(感谢@mathk)
评论
export CFLAGS=" -DDEFAULT_PIDLOG=\\\"/var/run/apache/apache.pid\\\""