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

时间:2015-05-01 12:15:30

标签: c++ cmake arm raspberry-pi cross-compiling

我想将Raspberry Pi作为交叉编译目标添加到使用CMake的C ++项目中。根据{{​​3}}问题的已接受答案,我已成功设置了环境。

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

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

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

有没有办法在CMakeLists.txt中使用CMAKE_SYSTEM_PROCESSOR?或者,它是否仅在工具链文件中有意使用?

我正在使用CMake 2.8.12.2。

1 个答案:

答案 0 :(得分:0)

看起来你已成为CMake double expansion的受害者。请尝试使用此代码:

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