簡體   English   中英

CMake 找不到 Visual C++ 編譯器

[英]CMake does not find Visual C++ compiler

安裝 Visual Studio 2015 並在以前的項目上運行 CMake 后,CMake 錯誤指出它找不到 C 編譯器。

The C compiler identification is unknown
The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.

我在 Visual Studio 文件夾C:\Program Files\Microsoft Visual Studio 14.0中搜索cl.exe ,但找不到它。

如何設置 CMake 以使用 Visual Studio 2015 在 Windows 上工作?

我找到了解決方案。 雖然 Visual Studio IDE 安裝成功,但它沒有安裝任何構建工具,因此沒有安裝 C++ 編譯器。

通過嘗試在 Visual Studio 2015 GUI 中手動創建 C++ 項目,我能夠提示它下載 C++ 包。 然后 CMake 能夠毫無困難地找到編譯器。

這是對我有用的解決方案:

  1. 打開 Visual Studio 命令提示工具(以管理員身份)。 在 Windows 10 上,它可能被稱為“開發人員命令提示符”。
  2. 導航到您擁有 CMake 可執行文件的位置
  3. 運行 Cmake.exe
  4. 像往常一樣繼續選擇構建和源文件夾
  5. 選擇合適的 Visual Studio 編譯器並點擊配置按鈕

希望它應該運行沒有問題。

我查看了 CMakeError.log 文件,發現了一個關於cannot run 'rc.exe'的錯誤

我搜索並找到了這個答案,將 RC.Exe 和 RcDll.Dll 從 Microsoft SDKs bin 復制到 VC bin,然后 CMake 工作。


編輯:另一個問題的最佳答案表明這是一個 PATH 問題,因此足以確保 Microsoft SDK bin 在您的 PATH 中。

那些在 Visual Studio 2017 上遇到這個問題的人:有一個與 CMake 相關的功能需要與相關的編譯器工具集一起選擇和安裝。 請參閱下面的屏幕截圖。

必須安裝用於 CMake 的 Visaul C++ 工具

確保在生成器中使用正確版本的 Visual Studio。 安裝 Visual Studio 14 時,我錯誤地選擇了 Visual Studio 15。

如果上述解決方案均無效,請停止並進行完整性檢查。

我使用錯誤的-G <config>字符串被燒毀,它給了我這個誤導性錯誤。

首先,從 VS 命令提示符而不是常規命令提示符運行。 您可以在Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015找到它這設置了 VS 工具等的所有正確路徑。

現在看看 cmake 有哪些可用的生成器...

cmake -help

...<snip>... The following generators are available on this platform: Visual Studio 15 [arch] = Generates Visual Studio 15 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. Optional [arch] can be "Win64" or "IA64". ...

然后選擇[拱]中加入適當的字符串。

mkdir _build cd _build cmake .. -G "Visual Studio 15 Win64"

在子目錄中運行 cmake 可以更輕松地進行“清理”,因為您可以刪除該目錄中的所有內容。

我升級到 Visual Studio 15 但沒有注意並試圖為 2012 生成。

對我來說,我檢查了CMakeError.log文件,發現:

[...] 錯誤 MSB8036:未找到 Windows SDK 8.1 版。 安裝所需版本的 Windows SDK 或更改項目屬性頁中的 SDK 版本,或通過右鍵單擊解決方案並選擇“重定向解決方案”。

盡管在 Windows 7 上使用了 Visual Studio 2017。所以看起來 CMake 正在嘗試使用 Windows 8.1 SDK 構建其檢測項目。

我使用 Visual Studio 安裝程序添加了該組件,現在 CMake 很高興。

菜單 → Visual Studio 2015 → Visual Studio 2015 的 MSBuild 命令提示符。然后 CMake 可以找到cl.exe

set PATH="c:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\";%PATH%

將上面的路徑更改為安裝 Windows SDK 的位置。

CMake 可以找到rc.exe

cd 到CMakeLists.txt的路徑並執行:

md .build
cd .build
cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release
cmake --build .

-G之后的參數應該由 CMake 獲取。 使用--help ; 您可能有也可能沒有發電機。

我遇到了同樣的問題,並通過重新啟動 Visual Studio 安裝並檢查以下選項來修復它:

Windows and Web Development / Universal Windows App Development Tools / Windows 10 SDK

它包含大多數應用程序中使用的標准 C++ 頭文件,因此通常也需要安裝它。

使用 Visual Studio 2015 Professional 時,我在 Windows 10 下遇到了這個問題,而 Visual Studio 2015 Express 工作正常! 在 Windows 7 下,兩個 Visual Studio 版本都可以使用。

從 Visual Studio 2015 Professional IDE 創建的新項目成功編譯,但 CMake 將無法找到編譯器報告:

The C compiler identification is unknown
The CXX compiler identification is unknown

我將 CMake 從 3.4.1 升級到 3.11.4,現在問題消失了。

如果您使用的是 Visual Studio 2017,則至少需要 CMake 3.8!

我在通過 CMake 生成的 Visual Studio 2017 項目中遇到了類似的問題。 在使用 C++ 的桌面開發中安裝 Visual Studio 時,某些軟件包丟失。 見快照:

Visual Studio 2017 軟件包:

Visual Studio2017 軟件包

另外,將 CMake 升級到最新版本。

就我而言,我可以在CMakeError.log看到 CMake 找不到 Windows SDK( MSB8003: Could not find WindowsSDKDir variable from the registry )。

可以使用以下命令在第一次 CMake 運行的命令行上指定版本:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

設置后我更進一步,但后來我遇到了更多問題(所以我假設我的環境不知何故搞砸了),但也許它會幫助解決這個問題的人。

一些提示:

  • 嘗試通過檢查“高級”並修改 CMAKE_LINKER 和 CMAKE_MAKE_PROGRAM 來手動設置路徑
  • 刪除緩存 - 在帶有 GUI 的 CMake 中轉到:文件 → 刪除緩存。

我的問題是先前所述的組合:我已將編譯器版本設置為 15 而不是 14,更正后,我不得不刪除緩存。

我還以管理員身份啟動了 Visual Studio 命令提示符,並從那里運行了 cmake-gui.exe

然后一切都按預期進行。

在我的情況下,問題是父項目,其中包括 googletest via

add_subdirectory(gtest_dir)

被定義為

PROJECT( projname CXX )

不知何故,CMake 無法識別

PROJECT(sub_project_name CXX C)

因為 C 編譯器未在父級中設置。

我通過使用解決了這個問題

PROJECT( projname CXX C)

在我的主CMakeLists.txt文件中。

在我的情況下,有一個環境變量集,這是此錯誤的原因。 從環境變量中刪除 cxx_flags 后問題解決。

對於擁有最新 Windows 10 Creator 版本的用戶來說,這可能是另一種解決方案:

堆棧溢出發布致命錯誤 LNK1104:無法打開文件“gdi32.lib”

以前的解決方案都不適合我。 但是我注意到,雖然我安裝了 Visual Studio 版本 15(不要與 Visual Studio 2015 混淆),但在我的計算機上創建的目錄是用於 Visual Studio 14 的。

當我按下配置按鈕時指定 Visual Studio 14 時它起作用了。

在更新 Visual Studio 2017 后,我在 CMake 3.12.1 中遇到了這個問題。我只是重新運行了 CMake,它工作正常。

我在 stackoverflow 上找到了這個解決方案,我為我工作,但如果您使用的是 Windows 10 操作系統,則無法使用其他解決方案,執行以下步驟將解決問題:

1) 轉到 C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\Bin

2) 然后從這個文件中復制 RC.exe 和 RcDll

3) 轉到 C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin 並將您復制的兩個文件粘貼到其中。

這就是我希望它是有幫助的...

如果您發現 ARM,請查看 Cmakelists.txt,您需要為 ARM 安裝 C++,以及用於 ARM bin 文件夾的 vcvarsall.bat。

是這些包:

適用於 ARM64 的 C++ 通用 Windows 平台“不需要”

ARM“不需要”的 Visual C++ 編譯器和庫

ARM64 的 Visual C++ 編譯器和庫“很可能需要”

Required for finding Threads on ARM 
enable_language(C) 
enable_language(CXX)

那么問題可能會消失:

找不到 CMAKE_C_COMPILER。

找不到 CMAKE_CXX_COMPILER。

如果以上不能解決您的問題?

您可以選擇通過在 enable_language(C) 所在的位置設置 # infront 來刪除 cmakelists.txt 中的選項 C 和 CXX。 並避免Android ARM處理器編譯。

通過添加缺失的組件來解決Modify->continue add如下使固定

我有一個相關的問題:運行cmake --help時,Visual C++ 生成器甚至不在列表中。

我在控制台中運行where cmake ,發現 cygwin 還提供了自己的cmake.exe文件,該文件正在使用中。 更改 PATH 中目錄的順序解決了該問題。

檢查 CMakeFiles 中的 CMakeErrors.log 返回:

C:\\Program Files (x86)\\MSBuild\\Microsoft.Cpp\\v4.0\\V140\\Platforms\\x64\\PlatformToolsets\\v140_xp\\Toolset.targets(36,5):警告 MSB8003:無法從注冊表中找到 WindowsSdkDir_71A 變量。 TargetFrameworkVersion 或 PlatformToolset 可能設置為無效的版本號。

該錯誤表示未安裝 XP (v140_xp) 的構建工具。 為了修復它,我在 Visual Studio 2019 安裝程序中的單個組件選項卡下安裝了正確的功能:

在此處輸入圖片說明

我在使用 CMake GUI 和 VS 21019 社區版時遇到了這個問題。 我想我可能在 Visual Studio 之前安裝了 CMake - 當然在我將 CMake 3.15.2 更新到 3.15.3 之后問題就消失了。

檢查名稱文件夾是否太長

這個問題很老,但這里的解決方案都沒有為我工作。 我正在使用 Visual Studio 2019,在我的情況下,C++ 編譯工作正常,但有一天突然壞了。

但是,我注意到 Visual Studio 安裝程序中已准備好安裝更新。

安裝該更新、重新啟動計算機並重新啟動 Visual Studio 后,所有 C++ CMake 問題都消失了。 我不太確定為什么會修復它,我只能推測,但我只能假設發生了兩件事之一。 要么安裝該更新修復了一個損壞的安裝,要么更新在后台悄悄下載並准備好,在這個過程中破壞了一些東西。

我正在運行舊的 cmake 版本(即 3.8)並且我正在使用 Visual Studio 16 - 2019。更新我的 cmake 版本后,它確實檢測到了編譯器。

我在 VSCode Cmake 擴展中遇到了同樣的問題,我通過檢查以下兩個選項來解決它: 在此處輸入圖像描述 在此處輸入圖像描述

最后點擊【掃描試劑盒】

cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug "-DCMAKE_C_COMPILER:FILEPATH=C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6- rev0\\mingw64\\bin\\gcc.exe" "-DCMAKE_CXX_COMPILER:FILEPATH=C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe" -Hc :/code -Bc:/code/build -G "MinGW Makefiles"

因為 CMake 無法找到您的 Visual Studio 編譯器。 啟動任何將下載所需編譯器的項目,然后 CMake 必須能夠找到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM