Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMAKE_系统_处理器似乎为空。什么';什么是操作系统不可知论的最佳策略?_Cmake - Fatal编程技术网

CMAKE_系统_处理器似乎为空。什么';什么是操作系统不可知论的最佳策略?

CMAKE_系统_处理器似乎为空。什么';什么是操作系统不可知论的最佳策略?,cmake,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_CX

我试图根据处理器类型设置一组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_处理器是空的,无法运行STREQUAL比较。为什么这是空的

现在,我通过跑步来设置

EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)

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

在用项目(…)设置项目名称之后,必须使用

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

启用交叉编译时,它可以由指定。

您在哪个系统上获取空变量?有关变量行为的一些详细信息,请参见,例如:“CMAKE_SYSTEM_PROCESSOR:CMAKE正在为其构建的CPU的名称。在支持uname的系统上,此变量设置为uname-p的输出,在windows上,此变量设置为环境变量PROCESSOR_架构的值。”忘了提到那些值只有在调用
project()
之后才设置。
Linux 4.4.0-112-generic\135 Ubuntu SMP Fri Jan 19 11:48:36 UTC 2018 x86\u 64 x86\u 64 GNU/Linux
project()调用使它有点棘手。我在一个单独的cmake文件中设置了与操作系统相关的内容,该文件包含在我的CMakeLists.txt文件中。将项目放在include之前会给我一个无限循环
,您已经更改了需要删除缓存的变量。“配置”将重新运行,您可能需要重置一些变量。
能否添加准备系统的文件内容?只是一个猜测,但是你知道大多数变量都有一个对应的
。\u INIT
?我承认,我知道上述警告会给出的唯一变量是设置编译器路径或生成器本身(这两者都不应该是
CMakeLists.txt
)的一部分。谢谢这正是我的问题:)