【问题标题】:How to define compile-time -D macros (Apache 2.2)?如何定义编译时 -D 宏(Apache 2.2)?
【发布时间】:2013-08-12 15:57:12
【问题描述】:

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

【问题讨论】:

  • 似乎 DEFAULT_PIDLOG 应该定义一个常量 C 字符串。试试export CFLAGS=" -DDEFAULT_PIDLOG=\\\"/var/run/apache/apache.pid\\\""
  • 效果很好,谢谢!

标签: c gcc compiler-construction apache2 libtool


【解决方案1】:

似乎 DEFAULT_PIDLOG 应该定义一个常量 C 字符串。试试

export CFLAGS="-DDEFAULT_PIDLOG=\\\"/var/run/apache/apache.pid\\\""

(感谢@mathk)

【讨论】:

    【解决方案2】:

    DEFAULT_PIDLOG 应该定义一个常量 C 字符串。试试 export CFLAGS=" -DDEFAULT_PIDLOG=\\"/var/run/apache/apache.pid\\"

    【讨论】:

    • 您的导出末尾是否缺少报价单?我还没有尝试过,但上面的 mathk 评论似乎有效(希望编译不需要这么长时间!)。如果您想在您的回答中加入他的评论,我会将其标记为正确并继续这一天。
    • 后续:在 Smirno 的导出命令末尾添加另一个引号会出错,所以我认为答案是正确的。
    • @Jeff:我想说肯定是缺少引号。此外,如何引用和如何转义可能在很大程度上取决于使用的 shell。例如,在bash 中,你会这样做:CFLAGS=-DDEFAULT_PIDLOG=\"/var/run/apache/apache.pid\"ksh 也一样。
    • @alk,我尝试了那个精确的引用方案,它在我的问题(bash shell)中给了我同样的错误。只有上面 mathk 评论中的“三引号”有效。
    • @Jeff:那你为什么接受一个不正确的答案,就像这里的这个?
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2011-03-03
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多