Я пытаюсь перекрестно скомпилировать Ubuntu в Windows, используя CMake. У меня все настроено (установлено как mingw32, так и mingw64), и у меня есть соответствующие файлы toolchain для обоих. Проблема в том, что переменная, которую я установил в одном файле toolchain после ее использования, сохраняется во втором запуске вместе с другим файлом toolchain.Переменная CMake сохраняется между прогонами, хотя она была сброшена
Это мои Toolchain файлы:
Windows 64 бит: (Toolchain-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 бит: (Toolchain-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/
и выход еще начинается с
===Processor architecture: x64
Project - projectx64
Что я могу сделать, чтобы исправить это поведение?
Есть ли способ установить переменную без кэширования? BTW, я не могу найти строку PROCESSOR_ARCHITECTURE в любом месте в папке сборки, поэтому я не понимаю, как это можно кэшировать. Даже если он кэширован, его следует затенять, когда он будет повторно установлен непосредственно перед печатью - кеш не объясняет неправильное печатное сообщение (которое находится чуть ниже настройки переменной). – NBcode
Ну, похоже, что значение параметра CMAKE_TOOLCHAIN_FILE копируется в CMakeSystem.cmake под строкой/CMakeFiles/. Я думаю, что лучшим вариантом может быть отдельный каталог сборки для каждой платформы. –
NBcode