2015-01-17 2 views
0

Я пытаюсь перекрестно скомпилировать 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 

Что я могу сделать, чтобы исправить это поведение?

ответ

1

CMake будет кэшировать многие из значений, которые он находит в процессе настройки. Разочарочно он делает это до такой степени, что попытка воссоздать проекты с новой опцией, указанной в командной строке, просто не работает. Единственное решение, которое я нашел, - либо удалить весь каталог сборки, либо конкретный файл кеша в каталоге сборки, так называемый CMakeCache.txt.

+0

Есть ли способ установить переменную без кэширования? BTW, я не могу найти строку PROCESSOR_ARCHITECTURE в любом месте в папке сборки, поэтому я не понимаю, как это можно кэшировать. Даже если он кэширован, его следует затенять, когда он будет повторно установлен непосредственно перед печатью - кеш не объясняет неправильное печатное сообщение (которое находится чуть ниже настройки переменной). – NBcode

+0

Ну, похоже, что значение параметра CMAKE_TOOLCHAIN_FILE копируется в CMakeSystem.cmake под строкой/CMakeFiles/. Я думаю, что лучшим вариантом может быть отдельный каталог сборки для каждой платформы. – NBcode

Смежные вопросы