CMake 的全局属性 FIND_LIBRARY_USE_LIB64_PATHS
具有以下 documentation :
FIND_LIBRARY_USE_LIB64_PATHS
is a boolean specifying whether theFIND_LIBRARY
command should automatically search thelib64
variant of directories called lib in the search path when building 64-bit binaries.
阅读 “构建 64 位二进制文件时” 意味着 CMake 以某种方式知道我的目标体系结构,并自动打开/关闭相关行为。 我只是读得太深了,还是 CMake 有处理 32 位/64 位编译的更高级别的抽象?
如果有,我该如何配置 FIND_LIBRARY_USE_LIB64_PATHS
使用的任何机制,以强制进行 32 位/64 位编译?
我意识到存在强制 32 位/64 位的现有问题,但它们涉及 CMAKE_C_FLAGS
等。如果 CMake 具有更高级别的抽象,我宁愿它与 CFLAGS
混淆。
最佳答案
tl;dr; CMake 没有强制 32 位或 64 位编译的通用机制。您可以通过选择编译器或编译开关来做到这一点。
但 CMake 实际上可以确定编译是针对 64 位还是 32 位(或者也可能是许多其他字长)目标。如 this answer 中所述和 CMake 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 中处理它,这不是很好。
关于configuration - CMake 是否有更高级别的抽象来检测 32 位/64 位构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30008206/