CMAKE_SYSTEM_PROCESSOR似乎为空。 OS不可知的最佳策略是什么?

时间:2018-06-25 13:09:13

标签: cmake

我正在尝试根据处理器类型设置一堆CXX标志。

IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DAMD64")
ELSE()
    STRING(FIND ${CMAKE_SYSTEM_PROCESSOR} "86" 86_res)
    IF(${86_res} EQUAL -1)
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIA32")
    ENDIF()
    STRING(FIND ${CMAKE_SYSTEM_PROCESSOR} "arm" arm_res)
    IF(${arm_res} EQUAL -1)
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DARM")
    ENDIF()
ENDIF()

但是无论出于什么原因,CMAKE_SYSTEM_PROCESSOR为空并且无法运行STREQUAL比较。为什么这是空的?

现在我通过运行

进行设置
EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)

但这在Windows上不起作用,所以我不确定在这里应该做什么。

1 个答案:

答案 0 :(得分:1)

必须使用宏之后通过 PROJECT(...)设置项目名称。

MESSAGE("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") # EMPTY!
PROJECT(dummy)
MESSAGE("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") # OK!

输出:

1> CMAKE_SYSTEM_PROCESSOR:
1>-- Selecting Windows SDK version...
1> CMAKE_SYSTEM_PROCESSOR: AMD64

启用交叉编译时,可以由toolchains分配。