如何定义编译时-D宏(Apache 2.2)?

How to define compile-time -D macros (Apache 2.2)?

提问人:Jeff 提问时间:8/12/2013 最后编辑:Jeff 更新时间:8/15/2013 访问量:968

问:

在编译 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值的正斜杠和不同的引用技术,但它总是失败,显然是因为值中的正斜杠。

c gcc 编译器构造 apache2 libtool

评论

0赞 mathk 8/13/2013
似乎DEFAULT_PIDLOG应该定义一个常量 C 字符串。尝试export CFLAGS=" -DDEFAULT_PIDLOG=\\\"/var/run/apache/apache.pid\\\""

答:

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:我想说的是肯定缺少一个引号。此外,如何引用和如何逃生可能在很大程度上取决于所使用的外壳。例如,你会做: .相同。bashCFLAGS=-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)