Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过将参数传递给Autoconf来取消定义HAVE[function]宏?_C_Ruby_Macros_Autoconf - Fatal编程技术网

如何通过将参数传递给Autoconf来取消定义HAVE[function]宏?

如何通过将参数传递给Autoconf来取消定义HAVE[function]宏?,c,ruby,macros,autoconf,C,Ruby,Macros,Autoconf,问题:在Ruby解释器C代码中,有几个部分调用macOS和BSD上的u syscall函数。这在macOS领域是非常糟糕的行为,因为它是一个私有(且不稳定)API _uusyscall用法仅根据HAVE_u定义有条件地包括在内,因此我想知道我是否可以在没有它的情况下编译Ruby。以下是一个例子: 目光敏锐的读者也会注意到,即使是Ruby开发人员也不喜欢使用_syscall——他们希望用DL(Fiddle)库代替它 约束:我不想让Ruby解释器源代码进行fork操作,因为这将导致fork的持续繁琐

问题:在Ruby解释器C代码中,有几个部分调用macOS和BSD上的u syscall函数。这在macOS领域是非常糟糕的行为,因为它是一个私有(且不稳定)API

_uusyscall用法仅根据HAVE_u定义有条件地包括在内,因此我想知道我是否可以在没有它的情况下编译Ruby。以下是一个例子:

目光敏锐的读者也会注意到,即使是Ruby开发人员也不喜欢使用_syscall——他们希望用DL(Fiddle)库代替它

约束:我不想让Ruby解释器源代码进行fork操作,因为这将导致fork的持续繁琐维护。相反,我想在编译Ruby时将一个参数传递给构建工具


问题:我可以强制其中一个相关的HAVE\uuuuu宏未定义,或者禁用configure.in中的AC\u CHECK\u头,从而防止在此处使用uu syscall吗,通过将参数传递给构建工具?

您应该能够在
/configure
时间调整
ac\u cv.*
变量之一

特别是对于ruby-2.1.9,这应该可以:

./configure ac_cv_func___syscall=no

(作为参考,您可以查看
config.log
中设置的
ac\u cv.*
变量)

您准备好重新生成配置脚本了吗?如果是这样,您只需创建一个包含所需代码的合适文件(例如
acmacsyscall.m4
),然后调整构建过程,以便拾取该文件(可以使用
aclocal-I.
作为一个步骤,或者如果将
.m4
文件保留在其他位置,则使用另一个目录)。当然,您还必须安排调用宏;这可能意味着在
configure.ac
或用于
configure
脚本顶层构建的任何输入文件中添加一行。
./configure ac_cv_func___syscall=no