configuration - CMake 是否有更高级别的抽象来检测 32 位/64 位构建?

标签 configuration cmake

CMake 的全局属性 FIND_LIBRARY_USE_LIB64_PATHS 具有以下 documentation :

FIND_LIBRARY_USE_LIB64_PATHS is a boolean specifying whether the FIND_LIBRARY command should automatically search the lib64 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/

相关文章:

c++ - C++ 中灵活的应用程序配置

cmake 别名的用处

hadoop - Hadoop中单节点和伪分布式模式有什么区别?

java - Java 的强类型配置部分

google-app-engine - Google App Engine - 如何防止密码泄露

c++ - cmake 不使用 boost 多线程库

c++ - 使用 CMake 和 Visual Studio 时出现 "unresolved external symbol"错误

svn - 在 Subversion 中如何看待配置文件在不同系统上的部署?

c++ - 修复此编译错误 : identifier "and" is a special operator name in C++ [-Werror=c++-compat]?

cmake - 如何清除 Clion 中的 CMake 缓存?