【问题标题】:CMake variable persisting between runs even though it was resetCMake 变量在运行之间持续存在,即使它已被重置
【发布时间】:2015-01-17 00:09:32
【问题描述】:

我正在尝试使用 CMake 从 Ubuntu 交叉编译到 Windows。我已经配置了所有东西(同时安装了 mingw32 和 mingw64),并且我有两者的相关工具链文件。问题是我在一个工具链文件中设置的变量,在使用后,在第二次运行时也会与另一个工具链文件一起存在。

这些是我的工具链文件:

Windows 64 位:(工具链-Ubuntu-mingw64.cmake)

set(CMAKE_SYSTEM_NAME Windows)

unset(PROCESSOR_ARCHITECTURE CACHE)
set(PROCESSOR_ARCHITECTURE x64)
message("===Processor architecture: " ${PROCESSOR_ARCHITECTURE})
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)

set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)

set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Windows 32 位:(工具链-Ubuntu-mingw32.cmake)

set(CMAKE_SYSTEM_NAME Windows)

unset(PROCESSOR_ARCHITECTURE CACHE)
set(PROCESSOR_ARCHITECTURE x86)
message("===Processor architecture: " ${PROCESSOR_ARCHITECTURE})
set(TOOLCHAIN_PREFIX i686-w64-mingw32)

set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)

set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

这是我的 CMakeLists.txt 文件的顶部:

cmake_minimum_required(VERSION 2.8)

project("project")

set(SOURCE_FILE_LIST main.c)

set(ARCH_PROJECT_NAME ${PROJECT_NAME}${PROCESSOR_ARCHITECTURE})
message("Project - " ${ARCH_PROJECT_NAME})

...

当我跑步时

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake-toolchains/Toolchain-Ubuntu-mingw64.cmake ../src/

输出开始于:

===Processor architecture: x64
Project - projectx64

当我跑步时,意想不到的部分来了:

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake-toolchains/Toolchain-Ubuntu-mingw32.cmake ../src/

输出 still

开头
===Processor architecture: x64
Project - projectx64

我能做些什么来解决这个问题?

【问题讨论】:

    标签: build cmake cross-compiling


    【解决方案1】:

    CMake 将缓存它在设置过程中找到的许多值。令人沮丧的是,它这样做以至于尝试使用命令行上指定的新选项重新创建项目根本行不通。我找到的唯一解决方案是删除整个构建目录,或者删除构建目录中的特定缓存文件,我相信称为CMakeCache.txt

    【讨论】:

    • 有没有办法在不缓存的情况下设置变量?顺便说一句,我在构建文件夹中的任何地方都找不到 PROCESSOR_ARCHITECTURE 字符串,所以我真的不明白它可以被缓存。即使它被缓存,它也应该在打印前重新设置时被遮蔽 - 缓存不会解释错误的打印消息(位于变量设置的正下方)。
    • 好吧,CMAKE_TOOLCHAIN_FILE 参数的值似乎被复制到了 build/CMakeFiles/ 下的 CMakeSystem.cmake。我认为最好的选择可能是为每个平台设置一个单独的构建目录。
    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 2021-02-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2012-11-09
    • 2011-10-04
    • 2017-05-21
    相关资源
    最近更新 更多