2017-01-17 67 views
1

这是我第一次遇到这个错误。CMake的不承认MSVC编译

我试图克隆openvr并获得招呼OpenGL的样品运行,以下their instructions

cd samples 
mkdir build 
cd build 
cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_PREFIX_PATH=C:/Qt/5.6/msvc2013_64/lib/cmake 

我得到:

$ cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_PREFIX_PATH=C:/Qt/5.6/msvc20                  13_64/lib/cmake 
-- The C compiler identification is MSVC 19.0.24215.1 
-- The CXX compiler identification is MSVC 19.0.24215.1 
-- Check for working C compiler using: Visual Studio 14 2015 Win64 
-- Check for working C compiler using: Visual Studio 14 2015 Win64 -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler using: Visual Studio 14 2015 Win64 
-- Check for working CXX compiler using: Visual Studio 14 2015 Win64 -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- Compilation set for 64bits architectures. 
CMake Warning at CMakeLists.txt:40 (message): 
    SDL x64 runtime binaries not provided on Windows. 


CMake Error at CMakeLists.txt:98 (message): 
    Unsupported compiler. 


-- Configuring incomplete, errors occurred! 
See also "C:/Users/GBarbieri/Documents/Visual Studio 2015/Projects/openvr/sample                  s/build/CMakeFiles/CMakeOutput.log". 

如果我去98行检查:

if( (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") 
    OR (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")) 
    # Better to use the prebuilt GNU preprocessor define __GNUC__, 
    # kept for legacy reason with the sample code. 
    add_definitions(-DGNUC) 

    set(CMAKE_CXX_FLAGS   "${CMAKE_CXX_FLAGS} -std=c++11 -include ${SHARED_SRC_DIR}/compat.h") 
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -pedantic -g") 
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") 

    # Handles x86 compilation support on x64 arch. 
    if(${PLATFORM} MATCHES 32) 
    set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -m32") 
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") 
    endif() 
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC") 
    set(CMAKE_CXX_FLAGS   "${CMAKE_CXX_FLAGS} /Za") 
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /w2 /DEBUG") 
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MP /INCREMENTAL:NO") 
else() 
    message(FATAL_ERROR "Unsupported compiler. ") // line 98 
endif() 

看来它无法比拟"MSVC" ..让我做一个尝试,让我这个代码片段前添加:

message("${CMAKE_CXX_COMPILER_ID}") 
if(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC") 
    message("match") 
else() 
    message("!match") 
endif() 

然后返回:

MSVC 
!match 
CMake Error at CMakeLists.txt:104 (message): 
    Unsupported compiler. 

什么?

你能找出什么是错的,现在可好?

+0

它不应该只是:如果(MSVC)? – roalz

+0

你有试过吗?如果(CMAKE_CXX_COMPILER_ID匹配“MSVC”) – roalz

+0

这工作。我将修改'CMakeList.txt' – elect

回答

1

好吧,我在评论已经尝试过,正确的答案是使用:的

if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") 

代替

if(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC") 
+2

如果你有兴趣,为什么第一部作品,二是工作不看细节[什么是CMake的语法来设置和使用变量?](http://stackoverflow.com/questions/31037882/whats-the-cmake-syntax-to-set-and-use-variables)。有趣的是,我正是使用这个'MSVC'示例来演示可变命名解析的问题。 – Florian