CMake가 Visual C ++ 컴파일러를 찾지 못함


118

Visual Studio 2015를 설치하고 이전 프로젝트에서 CMake를 실행 한 후 C 컴파일러를 찾을 수 없다는 CMake 오류가 발생합니다.

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.

cl.exeVisual Studio 폴더 에서을 (를) 검색 C:\Program Files\Microsoft Visual Studio 14.0했지만 찾을 수 없습니다.

Visual Studio 2015를 사용하여 Windows에서 작동하도록 CMake를 설정하려면 어떻게해야합니까?


1
2015 년의 설치 경로가 CMake가 예상하는 것과 다를 수 있습니까? 어떤 버전의 CMake를 사용하십니까? 또한 CMake의 Windows 버전에 대해서는 모르지만 CMake가에서 PATH필요한 프로그램을 찾을 수 있으므로 업데이트되지 않으면 컴파일러를 찾을 수 없습니다.
일부 프로그래머 친구

1
Visual Studio 2015를 지원한다고 주장하는 cmake 버전 3.2.3을 사용하고 있습니다
Asher

1
버전 3.2.x를 사용하십시오. VS2015 이전에 Cmake를 설치할 때이 문제가 발생했습니다. cmake를 다시 설치하여이 문제를 해결하십시오
Andiana

때때로 컴퓨터를 재부팅하는 것을 잊거나 Visual Studio 설치 또는 업데이트 후 원하지 않는 경우가 있습니다. 이 경우 CMake는 컴파일러를 찾지 못합니다.
Noki

답변:


124

해결책을 찾았습니다. Visual Studio IDE가 성공적으로 설치되었지만 빌드 도구를 설치하지 않았으므로 C ++ 컴파일러를 설치하지 않았습니다.

Visual Studio 2015 GUI에서 C ++ 프로젝트 를 수동으로 생성 하려고 시도 하여 C ++ 패키지를 다운로드하라는 메시지를 표시 할 수있었습니다. 그런 다음 CMake는 어려움없이 컴파일러를 찾을 수있었습니다.


2
멋지다,이 대답은 나에게 단서를 주었다. VS2015 ISO를 사용하여 C ++ 구성 요소를 설치하고 문제를 해결했습니다.
Peter Liang

또한 VS2015 ISO를 사용하여 설치했으며 기본 vb / c # 부분 만 설치했습니다. 다른 C ++ 항목을 수정하고 설치하려면 ISO를 다시 시작해야했습니다.
Abhinav Gauniyal

2
정확히 어떤 패키지 / 구성 요소 / 물건을 설치 했습니까? Visual C ++ / Win32Project를 만들고 두 개의 구성 요소를 설치하고 VS 내에서 정상적으로 실행되었지만 cmake는 여전히 이전과 같이 불평했습니다. 감사. -S
ssimm

아주 멋지네요!
user2434741

2
이것은 2017 년과 비교했을 때도 효과가 있습니다. 정말 이상한 일입니다! 팁 고마워, 친구!
Steve Horvath

36

나를 위해 일한 솔루션은 다음과 같습니다.

  1. Visual Studio 명령 프롬프트 도구를 엽니 다 (관리자 권한). Windows 10에서는 '개발자 명령 프롬프트'라고 할 수 있습니다.
  2. CMake 실행 파일이있는 위치로 이동합니다.
  3. Cmake.exe 실행
  4. 빌드 및 소스 폴더를 선택하려면 평소와 같이 진행하십시오.
  5. 적절한 Visual Studio 컴파일러를 선택하고 구성 버튼을 누르십시오.

문제없이 실행되기를 바랍니다.


3
관리자로 VS 명령 프롬프트를 실행할 필요가 없다고 생각합니다. 그러나 VS 명령 promt를 실행하면 cmake가 찾고있는 모든 것이 경로에 배치됩니다. CMake를 설치 한 방법 (경로에 넣었는지 여부)에 따라 빌드 디렉터리로 이동하여 cmake ..거기에서 실행할 수도 있습니다. 예를 들어 git-bash 터미널이 모든 것을 자동으로 경로에 넣지 않기 때문에 어쨌든 Upvoted. 이것은 나를 도왔다!
hetepeperfan

1
일반적으로 IDE 생성기는 dev 명령 프롬프트 세트에있는 다양한 환경 변수를 필요로하지 않기 때문에 솔루션 이라기보다는 해결 방법으로 보입니다 (메이크 파일 생성기 또는 이와 유사한 것을 사용하는 경우에만 필요합니다. as Ninja)
Ryan Pavlik

2
업데이트 : Windows 10에서는 개발자 명령 프롬프트
Mattijs

2
매우 이상한 설명 : 1 : VS Studio 명령 프롬프트가 아닙니다. 2 : "탐색", "cd"명령 사용을 의미합니까? 3 : cmake-gui를 실행한다는 뜻입니까? 버튼 4를 "클릭"하려면 5 단계에서 말했듯이 진행 하시겠습니까 ?? 채우기를 의미합니까? 5 : 구성 창의 드롭 다운 상자에서 VS 컴파일러를 선택할 수 있지만 여전히 C 및 C ++ 컴파일러는 알 수 없습니다 ...
DrumM

1
Btw, 검색 cmake를 입력하면 cmake-gui를 찾을 수 있습니다
DrumM

31

CMakeError.log 파일을 살펴보고 다음에 대한 오류를 발견했습니다. cannot run 'rc.exe'

이 답변 을 검색 하여 Microsoft SDK bin에서 VC bin으로 RC.Exe 및 RcDll.Dll을 복사 한 다음 CMake가 작동했습니다.


편집 : 다른 질문에 대한 상위 답변 은 그것이 PATH 문제라는 것을 암시하므로 Microsoft SDK bin이 PATH에 있는지 확인하는 것으로 충분할 수 있습니다.


15

생성기에서 올바른 버전의 Visual Studio를 사용하고 있는지 확인합니다. Visual Studio 14를 설치할 때 Visual Studio 15를 잘못 선택했습니다.


3
이것도 제 문제였습니다. Visual Studios 2015가 버전 14이기 때문에 혼란 스럽습니다!
Paul Wintz

4
VS의 버전을 변경하려면 캐시를 삭제해야 할 수도 있습니다. 이렇게하려면 파일> 캐시 삭제를 클릭합니다.
Paul Wintz

이것은 최선의 버전 관리를 도왔습니다!
Noel Widmer

arrrrg, @PaulWintz 알림에 감사드립니다. 내 경우에는 깨끗한 cmake 캐시로 cmake를 실행했지만 VisualStudio가 VS 업데이트를 완료하기 위해 컴퓨터를 다시 시작하기를 기다리는 동안 cmake가 나쁜 상황을 영리하게 캐시했습니다.
orion elenzil

13

Visual Studio 2017에서이 문제를 겪는 사람들 : 관련 컴파일러 도구 세트와 함께 선택하고 설치해야하는 CMake 관련 기능이 있습니다. 아래 스크린 샷을 참조하십시오.

CMake 용 Visaul C ++ 도구를 설치해야합니다.


2015 버전은 어떻습니까? 2015 설치에서이 확인란을 찾을 수 없습니다. 한 가지 해결책은 2017 년으로 업데이트하는 것입니다 ...
DrumM

1
@DrumM,이 비주얼 스튜디오 2017을 위해 특별히이다 나는 기능은 VS 2015에 존재 믿지 않는다
바딤 버먼

이것이 꼭 필요한가요? Visual Studio 내에서 CMake를 사용하기 위해서만 사용되지 않습니까?
Peter Mortensen

@PeterMortensen : 그것은 나를 위해 문제를 해결했습니다. 다시, Visual Studio 2017.
Vadim Berman

9

위의 솔루션 중 어느 것도 작동하지 않으면 중지하고 온 전성 검사를 수행하십시오.

잘못된 -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". ...

그런 다음 [arch]가 추가 된 적절한 문자열 선택합니다 .

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

하위 디렉토리에서 cmake를 실행하면 해당 디렉토리의 모든 항목을 삭제할 수 있으므로 '정리'하기가 더 쉽습니다.

Visual Studio 15로 업그레이드했지만주의를 기울이지 않고 2012 년에 생성하려고했습니다.


7

나를 위해 CMakeError.log파일을 확인 하고 다음을 찾았습니다.

[...] 오류 MSB8036 : Windows SDK 버전 8.1을 찾을 수 없습니다. 필요한 Windows SDK 버전을 설치하거나 프로젝트 속성 페이지에서 SDK 버전을 변경하거나 솔루션을 마우스 오른쪽 단추로 클릭하고 "Retarget solution"을 선택합니다.

이것은 Windows 7에서 Visual Studio 2017을 사용하고 있음에도 불구하고 CMake가 Windows 8.1 SDK를 사용하여 탐지 프로젝트를 빌드하려는 것으로 보입니다.

Visual Studio 설치 관리자를 사용하여 해당 구성 요소를 추가했으며 이제 CMake는 조개처럼 행복합니다.


4

메뉴 → 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; 발전기가있을 수도 있고 없을 수도 있습니다.


msvc 2015 및 2017이 설치되어 있고 msvc 2015로 빌드하려고하면 vs2015 명령 프롬프트를 실행할 때 10.0 SDK가 자동 감지됩니다. 다음과 같이 명령 줄 매개 변수 끝에 at을 추가하여 8.1 sdk를 강제하도록 "VS2015 x64 기본 도구 명령 프롬프트"를 수정하여 SDK 버전을 지정할 수 있습니다. "% comspec % / k" "C : \ Program Files (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya

'Visual Studio 2015 용 MSBuild 명령 프롬프트'를 별도로 설치해야하나요? msvc 2017을 설치했지만 Visual Studio에 대한 명령 프롬프트가 없습니다.
meen

2

동일한 문제가 발생하여 Visual Studio 설치를 다시 시작하고 다음 옵션을 확인하여 해결했습니다.

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

여기에는 대부분의 애플리케이션에서 사용되는 표준 C ++ 헤더가 포함되어 있으므로이를 설치해야하는 경우가 많습니다.


2

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로 업그레이드했는데 이제 문제가 사라졌습니다.


1

Visual Studio 2017을 사용하는 경우 CMake 3.8 이상이 필요합니다!


1

CMake를 통해 생성 된 Visual Studio 2017 프로젝트에서 비슷한 문제가 발생했습니다. C ++를 사용하여 데스크톱 개발에서 Visual Studio를 설치하는 동안 일부 패키지가 누락되었습니다. 스냅 샷보기 :

Visual Studio 2017 패키지 :

Visual Studio2017 패키지

또한 CMake를 최신 버전으로 업그레이드하십시오.


0

제 경우에는이 오류의 원인이었던 환경 변수 세트가있었습니다. 환경 변수에서 cxx_flags를 삭제 한 후 문제가 해결되었습니다.


0

Visual Studio 2017을 업데이트 한 후 CMake 3.12.1에서이 문제가 발생했습니다. 간단히 CMake를 다시 실행하고 작동했습니다.


0

제 경우에는 CMakeError.logCMake가 Windows SDK ( MSB8003: Could not find WindowsSDKDir variable from the registry)를 찾을 수 없다는 것을 알 수있었습니다 .

버전은 다음을 사용하여 첫 번째 CMake 실행의 명령 줄에서 지정할 수 있습니다.

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

나는 그것을 설정 한 후 더 나아 갔지만 나중에 더 많은 문제를 겪었지만 (그래서 내 환경이 어떻게 든 엉망이라고 가정합니다), 아마도이 문제를 가진 누군가를 도울 것입니다.


0

몇 가지 팁 :

  • '고급'을 선택하고 CMAKE_LINKER 및 CMAKE_MAKE_PROGRAM을 수정하여 경로를 수동으로 설정하십시오.
  • 캐시 삭제-GUI가있는 CMake에서 파일 → 캐시 삭제로 이동합니다.

내 문제는 이전에 언급 한 조합이었습니다. 컴파일러 버전을 14 대신 15로 설정했으며 수정되면 캐시를 삭제해야했습니다.

또한 관리자로 Visual Studio 명령 프롬프트를 시작했고 거기서 cmake-gui.exe를 실행했습니다.

그런 다음 모든 것이 예상대로 작동했습니다.


0

제 경우에는 googletest를 포함하는 상위 프로젝트가 문제였습니다.

add_subdirectory(gtest_dir)

정의되었습니다

PROJECT( projname CXX )

어쨌든 CMake는 인식하지 못합니다.

PROJECT(sub_project_name CXX C)

C 컴파일러가 부모에 설정되지 않았기 때문입니다.

나는 사용하여 문제를 해결했습니다.

PROJECT( projname CXX C)

내 주 CMakeLists.txt파일에.



0

이전 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 그러나 Visual Studio 버전 15 (Visual Studio 2015와 혼동하지 말 것)를 설치했지만 내 컴퓨터에 생성 된 디렉터리는 Visual Studio 14 용이라는 것을 알았습니다.

구성 버튼을 눌렀을 때 Visual Studio 14를 지정했을 때 작동했습니다.


Visual Studio의 버전 번호는 단지 ... 이상합니다. Visual Studio 14는 실제로 Visual Studio 2015이며 Visual Studio 2014는 없습니다. trophygeek의 답변 stackoverflow.com/a/40332976/1319284
kutschkem

0

나는 stackoverflow 에서이 해결책을 찾았고 Windows 10 OS가있는 경우 다른 해결책을 사용하지 않지만 저를 위해 일합니다. 다음 단계를 수행하면 문제가 해결됩니다.

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으로 이동하여 복사 한 두 파일을 붙여 넣습니다.

그게 도움이 되길 바랍니다 ...


0

ARM 용 C ++를 설치하고 ARM bin 폴더 용 vcvarsall.bat를 사용해야하는 ARM을 찾으면 Cmakelists.txt를 참조하십시오.

다음 패키지입니다.

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 프로세서 컴파일을 피하십시오.



0

관련 문제가 있습니다. Visual C ++ 생성기가 .NET을 실행할 때 목록에 없었습니다 cmake --help.

where cmake콘솔에서 실행 한 결과 cygwin이 자체적 으로 사용중인 cmake.exe 파일 도 제공한다는 것을 알았습니다 . PATH에서 디렉토리 순서를 변경하면 문제가 해결되었습니다.


0

반환 된 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 설치 관리자에 적절한 기능을 설치했습니다.

여기에 이미지 설명 입력


0

CMake GUI 및 VS 21019 Community Edition에서이 문제가 발생했습니다. Visual Studio 이전에 CMake를 설치했을 수 있다고 생각합니다. 확실히 CMake 3.15.2를 3.15.3으로 업데이트 한 후에 문제가 사라졌습니다.



-3

CMake가 Visual Studio 컴파일러를 찾을 수 없기 때문입니다. 필요한 컴파일러를 다운로드 할 프로젝트를 시작하면 CMake가이를 찾을 수 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.