对于我的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()
结果是" CMake认为我们正在编译64位"。
但是,如果我添加
project(x)
最后,CMake输出" CMake认为我们正在编译的东西不是64位"。
project()
中的内容正在改变这一点,我该如何避免这种情况?
答案 0 :(得分:1)
调用project()
初始化大多数与编译器相关的东西。在那次调用之前,几乎每个CMake命令甚至变量都不能按预期工作。但是,CMake不会产生错误。
变量CMAKE_SIZEOF_VOID_P的文档明确说明其值是“由try compile确定的”,因此在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()