2015-01-17 32 views
0

我試圖穿越從Ubuntu的編譯到Windows,使用CMake的。我配置了一切(安裝了mingw32和mingw64),並且我有兩個相關的工具鏈文件。問題在於,我在一個工具鏈文件中設置的變量在使用後,會在第二次運行時與其他工具鏈文件一起存在。CMake的變量運行之間持續存在的,即使它被重置

這些都是我的工具鏈文件:

的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/ 

輸出 仍然開始
===Processor architecture: x64 
Project - projectx64 

我該如何解決這個問題?

回答

1

CMake的將緩存很多在安裝過程中找到的值。令人沮喪的是,它這樣做的目的是嘗試用命令行上指定的新選項重新創建項目根本無效。我發現的唯一解決方案是刪除整個構建目錄或構建目錄中的特定緩存文件,我相信這叫做CMakeCache.txt

+0

有沒有辦法設置一個變量,而不被緩存?順便說一句,我找不到PROCESSOR_ARCHITECTURE字符串在生成文件夾中的任何地方,所以我真的不知道它可以被緩存。即使它被高速緩存,它在打印之前重新設置時也應該被遮蔽 - 高速緩存不能解釋錯誤的打印信息(它位於變量設置的下方)。 – NBcode

+0

嗯,看來CMAKE_TOOLCHAIN_FILE參數的值下建立/ CMakeFiles/複製到CMakeSystem.cmake。我認爲最好的選擇可能是爲每個平臺分別建立一個目錄。 – NBcode

相關問題