tho*_*i56 2 installation cmake
对于我的 CMake 项目,我想构建 32 位和 64 位版本的库,并使用 CMake 将它们安装在正确的位置。
但是,即使我使用该GNUInstallDirs模块,CMake 也不会将库安装在正确的位置。
我已经将问题追溯到project()影响 void* 大小的事实,这看起来很奇怪。(GNUInstallDirs 使用`CMAKE_SIZEOF_VOID_P)。
使用以下 CMakeLists.txt:
cmake_minimum_required(VERSION 3.7)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
message (STATUS "CMake think we are compiling for 64-bit")
else ()
message (STATUS "CMake think we are compiling for something not 64-bit")
endif()
Run Code Online (Sandbox Code Playgroud)
结果是“CMake 认为我们正在编译 64 位”。
但是如果我添加
project(x)
Run Code Online (Sandbox Code Playgroud)
最后,CMake 输出“CMake 认为我们正在编译非 64 位的内容”。
是什么在project()改变这一点,我怎样才能避免这种情况?
调用project()初始化大多数与编译器相关的东西。在此之前,几乎每个 CMake 命令甚至变量都无法按预期工作。但是,CMake 不会生成与此相关的错误。
变量CMAKE_SIZEOF_VOID_P的文档明确指出,它的值是“由尝试编译确定”,因此在调用之前检查它project()是没有用的:编译器尚未设置。
正确的用法是:
cmake_minimum_required(VERSION 3.7)
project() # Initialize compiler-related stuff
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
message (STATUS "CMake think we are compiling for 64-bit")
else ()
message (STATUS "CMake think we are compiling for something not 64-bit")
endif()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2414 次 |
| 最近记录: |