我可以在 CMakeLists 中使用在工具链文件中定义的 CMAKE_SYSTEM_PROCESSOR 吗?

Can I use CMAKE_SYSTEM_PROCESSOR, defined in a toolchain file, in CMakeLists?

我想将 Raspberry Pi 作为交叉编译目标添加到使用 CMake 的 C++ 项目中。根据 this 问题的公认答案,我已成功设置环境。

该项目已经有许多构建目标,所有这些都以非常丑陋的方式在主 CMakeLists.txt 中定义(这是一个旧项目)。在此文件中,根据 CMAKE_SYSTEM_PROCESSOR 变量设置了一些编译器标志,例如:

if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm")
    # do something
endif ()

根据 guide,我应该在我的 Raspberry 工具链文件中设置它。我添加了 SET(CMAKE_SYSTEM_PROCESSOR arm),但我无法从 CMakeLists 访问它,因为它在那里变成了一个空字符串。我对其他变量没有这个问题,比如 CMAKE_SYSTEM_NAME。使用 message(),我可以看到它在工具链文件中仍然可用,但之后变为空。

有什么方法可以在CMakeLists.txt中使用CMAKE_SYSTEM_PROCESSOR吗?或者,它是否有意仅在工具链文件中可用?

我正在使用 CMake 2.8.12.2。

看来您已成为 CMake double expansion 的受害者。尝试改用它:

if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
    # do something
endif ()

看来这毕竟是一个缓存问题 - 在一个干净的目录中构建解决了这个问题。虽然我仍然想知道它是如何变成空字符串的...