在gRPC中,为arm进行构建时,我需要禁用这三个变量:
-DRUN_HAVE_STD_REGEX=OFF
-DRUN_HAVE_POSIX_REGEX=OFF
-DRUN_HAVE_STEADY_CLOCK=OFF
我对他们的工作还不是很清楚,所以我想知道:
由于CMake不会自动检测到它们,因此如果在所有使用案例中都不会出现重大问题的情况下,我总是更容易禁用它们。
答案 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
希望这能回答您的第一个问题。我不知道如何回答您的第二个问题,因为我一直只是手动设置这些变量,以匹配我为之编译的任何系统的功能。