为什么`project()`会影响CMake对`CMAKE_SIZEOF_VOID_P`的看法?

时间:2017-04-12 20:43:10

标签: cmake install

对于我的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()中的内容正在改变这一点,我该如何避免这种情况?

1 个答案:

答案 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()