CMake non trova il compilatore Visual C ++


118

Dopo aver installato Visual Studio 2015 e eseguito CMake su un progetto precedente, CMake si è verificato un errore indicando che non è stato possibile trovare il compilatore 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.

Ho cercato cl.exenella cartella Visual Studio C:\Program Files\Microsoft Visual Studio 14.0e non sono riuscito a trovarlo.

Come si configura CMake per funzionare su Windows con Visual Studio 2015?


1
Forse il percorso di installazione del 2015 non è quello che CMake si aspetta? Quale versione di CMake usi? Inoltre, non conosco la versione Windows di CMake, ma potrebbe essere possibile che CMake cerchi in PATHper trovare il programma di cui ha bisogno, quindi se non è aggiornato non può trovare il compilatore.
Un tizio programmatore il

1
Sto usando la versione 3.2.3 di cmake che afferma di avere il supporto per Visual Studio 2015
Asher

1
Usa la versione 3.2.x, ho riscontrato questo problema quando installo Cmake prima di VS2015, quindi reinstalla cmake
risolvilo

A volte ti dimentichi di riavviare il computer o non vuoi farlo dopo un'installazione o un aggiornamento di Visual Studio. In tal caso, CMake non troverà il tuo compilatore.
Noki

Risposte:


124

Ho trovato la soluzione. Sebbene l'IDE di Visual Studio sia stato installato correttamente, non ha installato alcuno strumento di compilazione e quindi non ha installato il compilatore C ++.

Tentando di creare manualmente un progetto C ++ nella GUI di Visual Studio 2015, sono stato in grado di chiedergli di scaricare i pacchetti C ++. CMake è stato quindi in grado di trovare il compilatore senza alcuna difficoltà.


2
Fantastico, questa risposta mi ha dato l'indizio. Uso la mia ISO VS2015 per installare i componenti C ++ e il problema viene risolto.
Peter Liang

Ho anche installato utilizzando l'ISO VS2015 e ha installato solo le parti di base vb / c #. Ho dovuto avviare di nuovo ISO per modificare e installare altre cose c ++.
Abhinav Gauniyal

2
Esattamente quali pacchetti / componenti / cose avete installato? Ho creato un Visual C ++ / Win32Project, ha installato due componenti e ha funzionato bene all'interno di VS, ma cmake si è ancora lamentato come prima. Grazie. -S
ssimm

È molto carino!
user2434741

2
Questo ha funzionato anche con il 2017: che cosa strana! Grazie per la punta, amico!
Steve Horvath

36

Ecco la soluzione che ha funzionato per me:

  1. Apri lo strumento del prompt dei comandi di Visual Studio (come amministratore). Su Windows 10 potrebbe essere chiamato "Prompt dei comandi per sviluppatori".
  2. Vai al punto in cui hai l'eseguibile CMake
  3. Esegui Cmake.exe
  4. Procedi come al solito per selezionare build e cartella di origine
  5. Seleziona il compilatore Visual Studio appropriato e premi il pulsante Configura

Si spera che funzioni senza problemi.


3
Non penso che sia necessario eseguire il prompt dei comandi di VS come amministratore. Ma l'esecuzione del comando VS promt mette tutto ciò che cmake sta cercando sul percorso. A seconda di come hai installato CMake (indipendentemente dal fatto che lo metti nel percorso) puoi anche navigare nella tua directory di build ed eseguire cmake ..da lì. Votato comunque, perché il terminale git-bash, ad esempio, non mette automaticamente tutto sul suo percorso. Questo mi ha aiutato!
hetepeperfan

1
Sembra più una soluzione alternativa che una soluzione, poiché normalmente i generatori IDE non hanno bisogno delle varie variabili di ambiente come si trovano nel set dei prompt dei comandi dev (ne avresti bisogno solo se stessi usando un generatore di makefile o simile, come come Ninja)
Ryan Pavlik

2
aggiornamento: su Windows 10 si chiama Prompt dei comandi per
Mattijs

2
Spiegazione molto strana: 1: non si chiama prompt dei comandi di VS Studio 2: "naviga", intendi usare il comando "cd"? 3: Vuoi dire, eseguire cmake-gui? Come dici nel passaggio 5 per "fare clic" su un pulsante 4: Procedi ?? intendi compilare? 5: Nella casella a discesa nella finestra di configurazione, posso selezionare il compilatore VS, ma i compilatori C e C ++ sono ancora sconosciuti ...
DrumM

1
A proposito, digita search cmake e troverai cmake-gui
DrumM

31

Ho cercato nel file CMakeError.log e ho trovato un errore su cannot run 'rc.exe'

Ho cercato e trovato questa risposta per copiare RC.Exe e RcDll.Dll dal cestino di Microsoft SDK al cestino VC, quindi CMake ha funzionato.


Modifica: la risposta principale a un'altra domanda suggerisce che si tratta di un problema di PATH, quindi potrebbe essere sufficiente per garantire che il cestino di Microsoft SDK sia nel tuo PATH.


15

Assicurati di utilizzare la versione corretta di Visual Studio nel generatore. Avevo selezionato in modo errato Visual Studio 15 durante l'installazione di Visual Studio 14.


3
Questo era anche il mio problema. È fonte di confusione perché Visual Studios 2015 è la versione 14!
Paul Wintz

4
Tieni presente che potresti dover eliminare la cache per modificare la versione di VS. A tale scopo, fare clic su File> Elimina cache.
Paul Wintz

Questo ha aiutato ... il controllo delle versioni al meglio!
Noel Widmer

arrrrg, @PaulWintz grazie per questo promemoria. Penso che nel mio caso ho eseguito cmake con una cache cmake pulita ma mentre VisualStudio mi stava aspettando di riavviare il computer per completare un aggiornamento VS, quindi cmake ha abilmente memorizzato nella cache la brutta situazione.
orion elenzil

13

Coloro che inciampano con questo su Visual Studio 2017: c'è una funzionalità relativa a CMake che deve essere selezionata e installata insieme ai relativi set di strumenti del compilatore. Guarda lo screenshot qui sotto.

Gli strumenti Visaul C ++ per CMake devono essere installati


E la versione 2015? Non sono riuscito a trovare questa casella di controllo nell'installazione del 2015. Una soluzione potrebbe essere l'aggiornamento al 2017 ...
DrumM

1
@DrumM, questo è specifico per Visual Studio 2017. Non credo che la funzionalità esista in VS 2015.
Vadim Berman

Sei sicuro che sia necessario? Non è solo per l'utilizzo di CMake da Visual Studio?
Peter Mortensen

@ PeterMortensen: ha risolto il problema per me. Ancora una volta, Visual Studio 2017.
Vadim Berman

9

Se nessuna delle soluzioni precedenti ha funzionato, fermati ed esegui un controllo di integrità.

Mi sono bruciato usando la -G <config>stringa sbagliata e mi ha dato questo errore fuorviante.

Innanzitutto, esegui dal prompt dei comandi di VS non dal normale prompt dei comandi. Puoi trovarlo in Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015Questo imposta tutti i percorsi corretti per gli strumenti VS, ecc.

Ora guarda quali generatori sono disponibili da 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". ...

Quindi scegli la stringa appropriata con [arch] aggiunto.

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

L'esecuzione di cmake in una sottodirectory rende più facile eseguire una "pulizia" poiché puoi semplicemente eliminare tutto in quella directory.

Sono passato a Visual Studio 15 ma non stavo prestando attenzione e stavo cercando di generare per il 2012.


7

Per me, ho controllato il CMakeError.logfile e ho trovato:

[...] errore MSB8036: la versione 8.1 di Windows SDK non è stata trovata. Installa la versione richiesta di Windows SDK o cambia la versione SDK nelle pagine delle proprietà del progetto o facendo clic con il pulsante destro del mouse sulla soluzione e selezionando "Retarget solution".

Questo nonostante l'utilizzo di Visual Studio 2017 su Windows 7. Sembra quindi che CMake stia cercando di creare il suo progetto di rilevamento con Windows 8.1 SDK.

Ho usato il programma di installazione di Visual Studio per aggiungere quel componente e ora CMake è felice come un mollusco.


4

Menu → Visual Studio 2015 → Prompt dei comandi di MSBuild per Visual Studio 2015. Quindi CMake può trovare cl.exe.

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

Modificare il percorso superiore in cui è installato Windows SDK.

CMake può trovare rc.exe.

cd al percorso di CMakeLists.txte fai:

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

Il parametro dopo -Gdovrebbe essere recuperato da CMake. Usa --help; potresti avere o meno il generatore.


Dopo aver installato msvc 2015 e 2017 e tentando di compilare con msvc 2015, verrà rilevato automaticamente l'SDK 10.0 durante l'esecuzione del prompt dei comandi vs2015. È possibile specificare la versione dell'SDK modificando il "Prompt dei comandi degli strumenti nativi VS2015 x64" per forzare l'SDK 8.1 aggiungendo alla fine del parametro della riga di comando in questo modo; "% comspec% / k" "C: \ Programmi (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya

Devo installare separatamente "MSBuild Command Prompt per Visual Studio 2015"? Ho installato msvc 2017 ma il prompt dei comandi per Visual Studio non è presente.
meen

2

Ho riscontrato lo stesso problema e l'ho risolto riavviando l'installazione di Visual Studio e selezionando la seguente opzione:

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

Contiene le intestazioni C ++ standard utilizzate nella maggior parte delle applicazioni e quindi è spesso necessario installarlo.


2

Ho riscontrato questo problema in Windows 10 quando utilizzavo Visual Studio 2015 Professional, mentre Visual Studio 2015 Express funzionava! In Windows 7, entrambe le versioni di Visual Studio funzionavano.

I nuovi progetti creati dall'IDE di Visual Studio 2015 Professional vengono compilati correttamente, ma CMake non riuscirà a trovare il report del compilatore:

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

Ho aggiornato CMake da 3.4.1 a 3.11.4 e ora il problema è scomparso.


1

Se utilizzi Visual Studio 2017, hai bisogno di almeno CMake 3.8!


1

Ho avuto un problema simile con il progetto Visual Studio 2017 generato tramite CMake. Alcuni pacchetti mancavano durante l'installazione di Visual Studio nello sviluppo desktop con C ++. Vedi istantanea:

Pacchetti di Visual Studio 2017:

Pacchetti di Visual Studio2017

Inoltre, aggiorna CMake alla versione più recente.


0

Nel mio caso c'era una variabile di ambiente impostata che era la ragione di questo errore. Il problema è stato risolto dopo aver eliminato cxx_flags dalle variabili di ambiente.


0

Ho riscontrato questo problema con CMake 3.12.1, dopo un aggiornamento di Visual Studio 2017. Ho semplicemente eseguito nuovamente CMake e ha funzionato.


0

Nel mio caso ho potuto vedere CMakeError.logche CMake non è riuscito a trovare Windows SDK ( MSB8003: Could not find WindowsSDKDir variable from the registry).

La versione può essere specificata sulla riga di comando alla prima esecuzione di CMake utilizzando:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Sono andato oltre dopo averlo impostato, ma ho riscontrato più problemi in seguito (quindi presumo che il mio ambiente sia in qualche modo incasinato), ma forse aiuterà qualcuno con questo problema.


0

Un paio di suggerimenti:

  • Prova a impostare il percorso manualmente selezionando "avanzate" e modificando CMAKE_LINKER e CMAKE_MAKE_PROGRAM
  • Elimina la cache: in CMake con GUI vai a: File → Elimina cache.

Il mio problema era una combinazione di quanto detto in precedenza: ho impostato la versione del compilatore su 15 invece di 14 e quando è stato corretto, ho dovuto eliminare la cache.

Ho anche avviato il prompt dei comandi di Visual Studio come amministratore e da lì ho eseguito cmake-gui.exe

Poi tutto ha funzionato come doveva.


0

Nel mio caso il problema era che il progetto principale, che include googletest tramite

add_subdirectory(gtest_dir)

è stato definito come

PROJECT( projname CXX )

In qualche modo, CMake non riconosce

PROJECT(sub_project_name CXX C)

poiché il compilatore C non è impostato nel genitore.

Ho risolto il problema utilizzando

PROJECT( projname CXX C)

nel mio CMakeLists.txtfile principale .



0

Nessuna delle soluzioni precedenti ha funzionato per me. Tuttavia ho notato che sebbene avessi installato Visual Studio versione 15 (da non confondere con Visual Studio 2015) la directory creata sul mio computer era per Visual Studio 14.

Quando ho specificato Visual Studio 14 quando ho premuto il pulsante di configurazione ha funzionato.


La numerazione delle versioni per Visual Studio è semplicemente ... dispari. Visual Studio 14 è in realtà Visual Studio 2015, non v'è alcun Visual Studio 2014. Sede di trophygeek risposta stackoverflow.com/a/40332976/1319284
kutschkem

0

ho trovato questa soluzione su stackoverflow e lavoro per me sebbene non funzioni altre soluzioni se si dispone di un sistema operativo Windows 10, eseguire i seguenti passaggi risolverà il problema:

1) vai a C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin

2) quindi copia RC.exe e RcDll da questo file

3) vai su C: \ Programmi (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin e incolla i due file che hai copiato.

questo è tutto ciò che spero sia utile ...


0

Cerca nel Cmakelists.txt se trovi ARM devi installare C ++ per ARM e anche vcvarsall.bat usa per la cartella bin ARM.

Sono questi pacchetti:

Piattaforma Windows universale C ++ per ARM64 "Non richiesto"

Compilatori e librerie Visual C ++ per ARM "non necessari"

Compilatori e librerie Visual C ++ per ARM64 "Molto probabilmente necessari"

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

Quindi i problemi potrebbero scomparire:

Impossibile trovare CMAKE_C_COMPILER.

Impossibile trovare CMAKE_CXX_COMPILER.

Se sopra non risolve il tuo problema?

Facoltativamente puoi rimuovere le opzioni C e CXX in cmakelists.txt impostando # davanti a dove si trova enable_language (C). Ed evita la compilazione del processore ARM Android.



0

Ho avuto un problema correlato: i generatori di Visual C ++ non erano nemmeno nell'elenco durante l'esecuzione cmake --help.

Ho eseguito where cmakein console e ho scoperto che cygwin fornisce anche il proprio file cmake.exe , che era in uso. La modifica dell'ordine delle directory in PATH ha risolto il problema.


0

Controllo di CMakeErrors.log in CMakeFiles restituito:

C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms \ x64 \ PlatformToolsets \ v140_xp \ Toolset.targets (36,5): avviso MSB8003: Impossibile trovare la variabile WindowsSdkDir_71A dal registro. TargetFrameworkVersion o PlatformToolset potrebbe essere impostato su un numero di versione non valido.

L'errore indica che gli strumenti di compilazione per XP (v140_xp) non sono installati. Per risolverlo ho installato la funzionalità corretta nel programma di installazione di Visual Studio 2019 nella scheda Componenti individuali:

inserisci qui la descrizione dell'immagine


0

Ho avuto questo problema con CMake GUI e VS 21019 Community Edition. Penso di aver installato CMake prima di Visual Studio - sicuramente dopo aver aggiornato CMake 3.15.2 a 3.15.3 il problema è scomparso.



-3

Perché CMake non è in grado di trovare il compilatore di Visual Studio. Avvia un progetto che scaricherà i compilatori richiesti e CMake dovrà essere in grado di trovarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.