我正在尝试根据处理器类型设置一堆 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()
Run Code Online (Sandbox Code Playgroud)
但无论出于何种原因 CMAKE_SYSTEM_PROCESSOR 为空并且无法运行 STREQUAL 比较。为什么这是空的?
现在我通过运行来设置它
EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)
Run Code Online (Sandbox Code Playgroud)
但这在 Windows 上不起作用,所以我不确定我应该在这里做什么。
必须在使用PROJECT(...)设置项目名称后使用该宏。
MESSAGE("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") # EMPTY!
PROJECT(dummy)
MESSAGE("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") # OK!
Run Code Online (Sandbox Code Playgroud)
输出:
1> CMAKE_SYSTEM_PROCESSOR:
1>-- Selecting Windows SDK version...
1> CMAKE_SYSTEM_PROCESSOR: AMD64
Run Code Online (Sandbox Code Playgroud)
当启用交叉编译时,它可以由工具链分配。
| 归档时间: |
|
| 查看次数: |
2413 次 |
| 最近记录: |