【问题标题】:Cmake doesn't recognize MSVC compilerCmake 无法识别 MSVC 编译器
【发布时间】:2017-01-17 08:54:14
【问题描述】:

这是我第一次遇到这个错误。

我正在尝试克隆 openvr 并运行 hello 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"..让我试试,让我在这段代码的sn-p之前添加:

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.

什么?

各位,你们能看出哪里不对吗?

【问题讨论】:

  • 不应该只是:if(MSVC) 吗?
  • 你试过了吗? if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  • 那行得通。我会修改CMakeList.txt
  • 你有 cmake 版本 > 3.1 吗?
  • cmake 版本 3.3.2

标签: c++ visual-studio-2015 cmake openvr


【解决方案1】:

好的,正如我在评论中尝试过的,正确的答案是使用:

if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")

而不是

if(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC")

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 2015-05-14
  • 2020-11-13
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多