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
。
答案 0 :(得分:1)
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中处理它,这不是很好。