m_deployment
m_deployment

Reputation: 45

CMAKE_SYSTEM_PROCESSOR seems to be empty. What's the best strategy for OS agnostic way to set this?

I'm trying to set a bunch of CXX flags based on processor type.

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()

But for whatever reason CMAKE_SYSTEM_PROCESSOR is empty and can't run the STREQUAL comparison. Why is this empty?

For now I set this by running

EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)

But that won't work on Windows so I'm not sure what I should do here.

Upvotes: 2

Views: 3067

Answers (1)

Maestro
Maestro

Reputation: 418

The macro must be used AFTER setting the project name with PROJECT(...).

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

Output:

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

It could be assigned by toolchains when enabling cross-compiling.

Upvotes: 6

Related Questions