RUN_HAVE_STD_REGEX,RUN_HAVE_POSIX_REGEX和RUN_HAVE_STEADY_CLOCK有什么作用?

时间:2019-05-05 14:20:22

标签: grpc

在gRPC中,为arm进行构建时,我需要禁用这三个变量:

-DRUN_HAVE_STD_REGEX=OFF
-DRUN_HAVE_POSIX_REGEX=OFF
-DRUN_HAVE_STEADY_CLOCK=OFF

我对他们的工作还不是很清楚,所以我想知道:

  1. 为什么在进行交叉编译时CMake无法自动检测到它们?
  2. 在支持它们的系统上禁用它们有什么影响?有时会崩溃吗?在某些情况下会降低性能?

由于CMake不会自动检测到它们,因此如果在所有使用案例中都不会出现重大问题的情况下,我总是更容易禁用它们。

1 个答案:

答案 0 :(得分:2)

gRPC使用CMake的try_run在交叉编译时自动检测平台是否支持功能。但是,某些变量需要手动提供。来自the documentation(添加了重点):

  

当交叉编译时,第一步中编译的可执行文件通常不能在构建主机上运行。 try_run命令检查CMAKE_CROSSCOMPILING变量以检测CMake是否处于交叉编译模式。在这种情况下,它仍将尝试编译可执行文件,但除非设置了CMAKE_CROSSCOMPILING_EMULATOR变量,否则它不会尝试运行可执行文件。取而代之的是,它将创建缓存变量,该变量必须由用户填充,或者通过在某些CMake脚本文件中将其预设为可执行文件(如果该可执行文件已在其实际目标平台上运行)所产生的值。

基本上,这是说CMake不会尝试在构建计算机上运行已编译的可执行文件,除非手动指定了一些测试结果(测试应在目标计算机上运行)。以下测试通常会引起问题:

-DRUN_HAVE_STD_REGEX
-DRUN_HAVE_GNU_POSIX_REGEX
-DRUN_HAVE_POSIX_REGEX
-DRUN_HAVE_STEADY_CLOCK

希望这能回答您的第一个问题。我不知道如何回答您的第二个问题,因为我一直只是手动设置这些变量,以匹配我为之编译的任何系统的功能。