CMake是否有更高级别的抽象来检测32位/ 64位版本?

时间:2015-05-02 22:30:15

标签: configuration cmake

CMake的全球财产FIND_LIBRARY_USE_LIB64_PATHS具有以下documentation

  

FIND_LIBRARY_USE_LIB64_PATHS是一个布尔值,指定是否   FIND_LIBRARY命令应自动搜索lib64 变体   在构建64位时,搜索路径中名为lib的目录   二进制文件。

读取"在构建64位二进制文​​件时#34; 意味着CMake以某种方式知道我的目标架构,并根据情况自动切换行为开/关。 我只是读了太多,或者CMake是否有更高级别的抽象来处理32位/ 64位编译?

如果有,我如何配置FIND_LIBRARY_USE_LIB64_PATHS使用的任何机制,强制进行32位/ 64位编译?

我意识到存在强制32位/ 64位的问题,但它们处理CMAKE_C_FLAGS之类的问题。如果CMake具有更高级别的抽象,我更倾向于弄乱CFLAGS

1 个答案:

答案 0 :(得分:1)

tl; dr; CMake没有强制32位或64位编译的通用机制。您可以选择编译器或编译开关。

但是CMake实际上可以确定编译是针对64位还是32位(或者可能是许多其他字长)的目标。如this answerCMake docs中所述,您应该使用:

if (CMAKE_SIZEOF_VOID_P EQUAL 8)
    message (STATUS "Compiling for 64-bit")
endif()

这可能是“构建64位二进制文​​件时的基础机制”。但是没有明确的变数。

注意,变量CMAKE_SIZEOF_VOID_P被缓存,因此如果您更改编译器选项,请说CMAKE_C_FLAGS使用'-m32'进行32位编译,它不会影响CMAKE_SIZEOF_VOID_P除非你清理你的构建目录。

因此,在某种程度上,32/64位处理似乎有一种通用的机制。它在某些情况下使用,但为了更广泛地使用它,你必须在你的CMakeLists中处理它,这不是很好。