Lỗi CMake tại CMakeLists.txt: 30 (dự án): Không tìm thấy CMAKE_C_COMPILER


104

Tôi đang cố tạo giải pháp Visual Studio với CMake để biên dịch phiên bản mới nhất của aseprite và CMake liên tục cung cấp cho tôi:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

Tôi đã tải xuống GCC và tôi đang sử dụng Visual Studio 2015 .

Tôi đang làm theo hướng dẫn này:

https://github.com/aseprite/aseprite/blob/master/INSTALL.md


Bạn có thể định cấu hình dự án cho Visual studio bằng trình biên dịch của nó hoặc cho Makefiles bằng gcc. Bạn đã thử phương pháp nào?
Tsyvarev

Lệnh cmake bạn đang nhập là gì?
bames53

Bạn đang sử dụng CMake mới nhất? Bạn đã sử dụng máy phát điện nào? Bạn đã chạy các lệnh từ dấu nhắc lệnh Visual Studio 2015 (vì vậy nó đã đặt các biến môi trường trình biên dịch)?
drescherjm

1
@ bames53 Chỉ muốn thêm vào các dòng lệnh tương ứng cho @Caio Fontes để thử: cmake .. -G "Visual Studio 14 2015"hoặc cmake .. -G "MSYS Makefiles"(nếu gcccó nghĩa là MinGW). Và tôi đã thấy những câu hỏi đó rất nhiều (như đây , đây , hoặc đây ) và tôi nghĩ rằng chúng ta đang thiếu một câu trả lời kết hợp / hướng dẫn về SO.
Florian

Câu trả lời:


97

Những thông báo lỗi

CMake Error at ... (project):
    No CMAKE_C_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also ".../CMakeFiles/CMakeOutput.log".
See also ".../CMakeFiles/CMakeError.log".

hoặc là

CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.
Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
...
-- Configuring incomplete, errors occurred!

chỉ có nghĩa là CMake không thể tìm thấy trình biên dịch C / CXX của bạn để biên dịch một chương trình thử nghiệm đơn giản (một trong những điều đầu tiên CMake thử khi phát hiện môi trường xây dựng của bạn).

Các bước để tìm ra sự cố của bạn phụ thuộc vào môi trường xây dựng mà bạn muốn tạo. Các hướng dẫn sau đây là tập hợp các câu trả lời ở đây về Stack Overflow và một số trải nghiệm của riêng tôi với CMake trên Microsoft Windows 7/8/10 và Ubuntu 14.04.

Điều kiện tiên quyết

  • Bạn đã cài đặt trình biên dịch / IDE và nó có thể biên dịch một lần bất kỳ chương trình nào khác (trực tiếp mà không cần CMake)
  • Bạn có phiên bản CMake mới nhất
  • Bạn có quyền truy cập trên ổ đĩa mà bạn muốn CMake tạo môi trường xây dựng của bạn
  • Bạn có một thư mục xây dựng sạch sẽ (vì CMake thực hiện lưu trữ những thứ từ lần thử trước), ví dụ như thư mục con của cây nguồn của bạn

    Windows cmd.exe

    > rmdir /s /q VS2015
    > mkdir VS2015
    > cd VS2015
    

    Vỏ bash

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS
    

    và đảm bảo rằng trình bao lệnh của bạn trỏ đến thư mục đầu ra nhị phân mới tạo của bạn.

Những điều chung bạn có thể / nên thử

  1. CMake có thể tìm và chạy với bất kỳ / trình biên dịch mặc định nào của bạn không? Chạy mà không đưa máy phát điện

    > cmake ..
    -- Building for: Visual Studio 14 2015
    ...
    

    Hoàn hảo nếu nó xác định chính xác máy phát điện để sử dụng - như ở đây Visual Studio 14 2015

  2. Điều gì đã thực sự thất bại?

    Trong thư mục đầu ra của bản dựng trước đó, hãy tìm CMakeFiles\CMakeError.logbất kỳ thông báo lỗi nào phù hợp với bạn hoặc cố gắng mở / biên dịch dự án thử nghiệm được tạo tại CMakeFiles\[Version]\CompilerIdC| CompilerIdCXXtrực tiếp từ dòng lệnh (như được tìm thấy trong nhật ký lỗi).

CMake không tìm thấy Visual Studio

  1. Cố gắng chọn đúng phiên bản trình tạo :

    > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
    
  2. Nếu điều đó không hữu ích, hãy thử đặt các biến môi trường Visual Studio trước (đường dẫn có thể thay đổi):

    > "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
    > cmake ..
    

    hoặc sử dụng phím Developer Command Prompt for VS2015tắt trong Menu Start của Windows của bạn theo All Programs/ Visual Studio 2015/ Visual Studio Tools(cảm ơn tại @Antwane về gợi ý).

Thông tin cơ bản : CMake hỗ trợ tất cả các phiên bản và phiên bản Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate, v.v.). Để xác định vị trí của trình biên dịch, nó sử dụng kết hợp tìm kiếm sổ đăng ký (ví dụ: tại HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir), các biến môi trường hệ thống và - nếu không ai trong số những người khác nghĩ ra điều gì đó - rõ ràng là cố gắng gọi trình biên dịch.

CMake không thể tìm thấy GCC (MinGW / MSys)

  1. Bạn khởi động trình bashbao MSys msys.batvà chỉ cần cố gắng gọi trực tiếpgcc

    $ gcc
    gcc.exe: fatal error: no input files
    compilation terminated.
    

    Ở đây nó đã tìm thấy gccvà đang phàn nàn rằng tôi đã không cung cấp cho nó bất kỳ thông số nào để hoạt động.

    Vì vậy, những điều sau sẽ hoạt động:

    $ cmake -G "MSYS Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ make
    

    Nếu không tìm thấy GCC, hãy gọi export PATH=...thêm đường dẫn trình biên dịch của bạn (xem Cách đặt biến môi trường PATH trong tập lệnh CMake? ) Và thử lại.

  2. Nếu nó vẫn không hoạt động, hãy thử đặt CXXtrực tiếp đường dẫn trình biên dịch bằng cách xuất nó (đường dẫn có thể thay đổi)

    $ export CC=/c/MinGW/bin/gcc.exe
    $ export CXX=/c/MinGW/bin/g++.exe
    $ cmake -G "MinGW Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ mingw32-make
    

    Để biết thêm chi tiết, hãy xem Cách chỉ định đường dẫn GCC mới cho CMake

    Lưu ý : Khi sử dụng trình tạo "MinGW Makefiles", bạn phải sử dụng mingw32-makechương trình được phân phối với MinGW

  3. Vẫn không làm việc? Lạ nhỉ. Hãy đảm bảo rằng trình biên dịch ở đó và nó có quyền thực thi (xem thêm chương điều kiện tiên quyết ở trên).

    Nếu không, phương sách cuối cùng của CMake là không thử bất kỳ tìm kiếm trình biên dịch nào và đặt trực tiếp các biến nội bộ của CMake bằng cách

    $ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..

    Để biết thêm chi tiết, hãy xem Cmake không thành công -D CMAKE_CXX_COMPILER = g ++trình biên dịch cài đặt lỗi Cmake

    Ngoài ra, những biến này cũng có thể được đặt cmake-gui.exetrên Windows. Xem Cmake không tìm thấy trình biên dịch

Bối cảnh : Giống như với Visual Studio. CMake hỗ trợ tất cả các loại hương vị GCC. Nó tìm kiếm các biến môi trường (CC, CXX, v.v.) hoặc đơn giản là cố gắng gọi trình biên dịch. Bên cạnh đó nó sẽ phát hiện bất kỳ tiền tố (khi cross-biên dịch ) và cố gắng để thêm nó vào tất cả binutils của trình biên dịch GNU toolchain ( ar, ranlib, strip, ld, nm, objdump, và objcopy).


1
Lưu ý, một số liên kết tài liệu cmake trỏ đến phiên bản CMake thực sự cũ, hãy nhớ sử dụng bộ chọn phiên bản để khớp với phiên bản bạn có trên máy tính của mình (ví dụ: nếu bạn không thấy nền tảng mới hơn được liệt kê bạn cần).
jrh

39

Đối với Ubuntu, vui lòng cài đặt những thứ bên dưới:

sudo apt-get update && sudo apt-get install build-essential

21

Điều này đã xảy ra với tôi sau khi tôi cài đặt Visual Studio 15 2017.

Trình biên dịch C ++ cho Visual Studio 14 2015 không phải là vấn đề. Có vẻ như đó là sự cố với Windows 10 SDK.

Việc thêm Windows 10 SDK vào Visual Studio 14 2015 đã giải quyết được vấn đề cho tôi.

Xem ảnh chụp màn hình đính kèm.

Nhập mô tả hình ảnh tại đây


13

Tôi cũng gặp phải lỗi này khi làm việc với CMake:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

Hộp 'cảnh báo' trong bài viết thư viện MSDN Visual C ++ trong Visual Studio 2015 đã cho tôi sự trợ giúp mà tôi cần.

Visual Studio 2015 không được cài đặt C ++ theo mặc định. Vì vậy, việc tạo một dự án C ++ mới sẽ nhắc bạn tải xuống các thành phần C ++ cần thiết.



5

Tôi đã gặp sự cố này khi xây dựng libgit2-0.23.4. Đối với tôi, vấn đề là trình biên dịch C ++ và các gói liên quan không được cài đặt với VS2015, do đó, tệp "C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" bị thiếu và Cmake không thể tìm thấy trình biên dịch.

Tôi đã thử tạo dự án C ++ theo cách thủ công trong Visual Studio 2015 GUI ( C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ) và trong khi tạo dự án, tôi nhận được lời nhắc tải xuống C ++ & các gói liên quan.

Sau khi tải xuống các gói yêu cầu, tôi có thể thấy vcvarsall.bat & Cmake đã có thể tìm thấy trình biên dịch và thực thi thành công với nhật ký sau:

C:\Users\aksmahaj\Documents\MyLab\fritzing\libgit2\build64>cmake ..
-- Building for: Visual Studio 14 2015
-- The C compiler identification is MSVC 19.0.24210.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual        
Studio 14.0/VC/bin/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual  
Studio 14.0/VC/bin/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE)
-- Could NOT find ZLIB (missing:  ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
-- zlib was not found; using bundled 3rd-party sources.
-- LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of 
the default search path.
-- Looking for futimens
-- Looking for futimens - not found
-- Looking for qsort_r
-- Looking for qsort_r - not found
-- Looking for qsort_s
-- Looking for qsort_s - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - not found
-- Found PythonInterp: C:/csvn/Python25/python.exe (found version "2.7.1")
-- Configuring done
-- Generating done
-- Build files have been written to:    
C:/Users/aksmahaj/Documents/MyLab/fritzing/libgit2/build64

1
Điều này đã làm việc cho tôi. Việc tạo một dự án C ++ theo cách thủ công để cài đặt các gói cần thiết đã thực hiện một mẹo nhỏ.
Melaz

5

Tôi đã có những lỗi tương tự với CMake. Trong trường hợp của tôi, tôi đã sử dụng sai phiên bản Visual Studio trong hộp thoại CMake ban đầu, nơi chúng tôi phải chọn trình biên dịch Visual Studio.

Sau đó, tôi đã thay đổi nó thành "Visual Studio 11 2012" và mọi thứ đã hoạt động. (Tôi có phiên bản Visual Studio Ultimate 2012 trên PC của mình). Nói chung, hãy thử nhập phiên bản Visual Studio phiên bản cũ hơn trong hộp thoại cấu hình CMake ban đầu.


4

Đối với tôi, vấn đề này đã biến mất trên Windows khi tôi chuyển dự án của mình sang thư mục mẹ nông hơn, tức là:

C:\Users\spenc\Desktop\MyProjectDirectory

thay vì

C:\Users\spenc\Desktop\...\MyProjectDirectory.

Tôi nghĩ nguồn gốc của vấn đề là do MSBuild có giới hạn độ dài đường dẫn tệp ở 260 ký tự. Điều này khiến kiểm tra trình biên dịch cơ bản mà CMake thực hiện để xây dựng một dự án được gọi là CompilerIdCXX.vcxprojkhông thành công với lỗi:

C1083: Cannot open source file: 'CMakeCXXCompilerId.cpp'

bởi vì độ dài của đường dẫn của tệp, ví dụ:

C:\Users\spenc\Desktop\...\MyProjectDirectory\build\CMakeFiles\...\CMakeCXXCompilerId.cpp

vượt quá giới hạn MAX_PATH.

CMake sau đó kết luận không có trình biên dịch CXX.


2

Đảm bảo rằng bạn đã chọn đúng phiên bản Visual Studio. Điều này phức tạp hơn có vẻ vì Visual Studio 2015 thực sự là Visual Studio 14 và tương tự Visual Studio 2012 là Visual Studio 11. Tôi đã chọn sai Visual Studio 15 thực sự là Visual Studio 2017, khi tôi đã cài đặt 2015.



1

Bạn cũng có thể đảm bảo rằng bạn là người dùng sudo và bạn có quyền truy cập ĐỌC / VIẾT trên thư mục bạn đang làm việc. Tôi đã gặp sự cố tương tự trên OS X và tôi đã khắc phục được sự cố chỉ bằng cách nhập vào chế độ sudo.


1

Chỉ trong trường hợp nó sẽ giúp bất kỳ ai giống như tôi trong tương lai:

Tôi đã gặp sự cố này trong 24 giờ nay, trên 3 máy 64 bit khác nhau (Win7, Windows 8.1 VM và máy tính xách tay WIn 8.1) - trong khi cố gắng xây dựng WebKit với VS 2017.

Vấn đề đơn giản ở đây là trình biên dịch VC ++ (tức là cl.exe và các tệp DLL phụ thuộc của nó) không hiển thị với CMake. Đơn giản. Bằng cách làm cho các thư mục VC ++ chứa các tệp nhị phân đó hiển thị với CMake và dấu nhắc lệnh đang làm việc của bạn (nếu bạn đang chạy Cmake từ dấu nhắc lệnh), thì đấy! (Ngoài những điểm chính do những người khác nêu ra ở trên)

Dù sao, sau tất cả các loại sửa lỗi - như được đăng trên nhiều diễn đàn này - tôi phát hiện ra rằng vấn đề ĐƠN GIẢN là đảm bảo rằng nội dung của biến PATH không lộn xộn với nhiều đường dẫn Visual Studio BIN, v.v.; và thay vào đó, trỏ tới:

a) vị trí của trình biên dịch của bạn (tức là cl.exe cho phiên bản Visual Studio ưa thích của bạn), trong trường hợp của tôi (nhắm mục tiêu nền tảng 64 bit và phát triển trên máy chủ 64 bit) là: C: \ Program Files (x86 ) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ Hostx64 \ x64

b) và ngoài ra, thư mục chứa DLL phụ thuộc được gọi (mà cl.exe phụ thuộc vào): api-ms-win-crt-runtime-l1-1-0.dll - trên máy của tôi là:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Remote Debugger \ x64

Hai thư mục này được thêm vào biến Đường dẫn hệ thống và CUSTOM được đơn giản hóa (hoạt động dưới dấu nhắc lệnh do Quản trị viên tư nhân), đã loại bỏ "Không tìm thấy CMAKE_C_COMPILER" và "Không tìm thấy CMAKE_CXX_COMPILER" của tôi. các lỗi.

Hy vọng nó sẽ giúp một ai đó.


1

Tôi nhận được chính xác lỗi được báo cáo nếu ccache được bật khi sử dụng trình tạo Xcode của CMake . Vô hiệu hóa ccache đã khắc phục sự cố cho tôi. Dưới đây, tôi trình bày một bản sửa lỗi / kiểm tra hoạt động cho MacOS, nhưng sẽ hoạt động tương tự trên các nền tảng khác.

Rõ ràng, có thể sử dụng trình tạo Xcode của CMake (và những thứ khác) kết hợp với ccache, như được mô tả ở đây . Nhưng tôi chưa bao giờ tự mình thử nó.

# 1) To check if ccache is enabled:
echo $CC
echo $CXX
# This prints something like the following: 
#     ccache clang -Qunused-arguments -fcolor-diagnostics. 
# CC or CXX are typically set in the `.bashrc` or `.zshrc` file.

# 2) To disable ccache, use the following:
CC=clang
CXX=clang++

# 3) Then regenerate the cmake project
cmake -G Xcode <path/to/CMakeLists.txt>

1
Tôi đã có thể giải quyết vấn đề tương tự bằng cách đảm bảo đầu ra của "xcode-select -p" trỏ đến cài đặt Xcode của tôi. Trong trường hợp của tôi, cài đặt Xcode và chạy "xcode-select -r" là đủ.
TomTasche

0

Tôi đã cập nhật bản cập nhật Visual Studio 2015 2 lên bản cập nhật 3 Visual Studio 2015 và nó đã giải quyết được sự cố của tôi.


Giải pháp này được yêu cầu tại nơi tôi làm việc sau khi họ đẩy bản cập nhật hệ điều hành Windows. Tôi đã sử dụng ít nhất 2 trong số các giải pháp trên trang này để sửa lỗi. Lỗi có thể xuất hiện trong bất kỳ điều kiện nào, vì vậy đây là lý do tại sao có một số câu trả lời khác nhau, nhưng có thể thực hiện được.
Natalie Cottrill,

0

Tôi đã gặp vấn đề tương tự với cmake-gui ( No CMAKE_CXX_COMPILER could be found.), trong khi chạy CMake từ dòng lệnh hoạt động tốt. Sau khi thêm các mục nhập theo cách thủ công

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

với biến môi trường PATH nó đã hoạt động đối với tôi.


0

Đối với tôi nó làm việc sử dụng các nhà phát triển Command Prompt mà đi kèm với Visual Studio và sau đó chỉ cần cdđến your/jcef/dirvà chạycmake -G "Visual Studio 14 Win64" ..


0

Tôi đã từng gặp vấn đề tương tự.

Tôi đã cố gắng cài đặt dlib trên máy tính của mình và nó đã cho tôi lỗi này. Hướng dẫn được đề cập trong câu hỏi dẫn đến tải xuống visual studio 2017. Tôi đã giải quyết vấn đề này bằng cách gỡ cài đặt VS 2017 và cài đặt VS 2015

Người ta có thể cài đặt VS 2015 thông qua chuỗi stackoverflow này: Cách tải xuống Visual Studio Community Edition 2015 (không phải 2017)


0

Tôi biết câu hỏi này là về visual studio 2015. Tôi đã đối mặt với vấn đề này với visual studio 2017. Khi tìm kiếm trên google, tôi đã truy cập trang này. Sau khi xem xét 2,3 câu trả lời đầu tiên, tôi nhận ra đây là vấn đề với cài đặt vc ++. Cài đặt khối lượng công việc "Phát triển máy tính để bàn với c ++" đã giải quyết được sự cố.

Phát triển máy tính để bàn với c ++


0

Tìm trong Cmakelists.txt nếu bạn tìm thấy ARM, bạn cần cài đặt C ++ cho ARM

Đó là các gói này:

Nền tảng Windows chung C ++ cho ARM64 "Không bắt buộc"

Trình biên dịch và thư viện Visual C ++ cho ARM "Không bắt buộc"

Trình biên dịch và thư viện Visual C ++ cho ARM64 "Rất có thể được yêu cầu"

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

Sau đó, các vấn đề

Không tìm thấy CMAKE_C_COMPILER nào.

Không tìm thấy CMAKE_CXX_COMPILER nào.

Có thể biến mất trừ khi bạn chỉ định trình biên dịch c như clang, và có thể cài đặt clang sẽ hoạt động theo cách khác.

Bạn có thể xóa tùy chọn trong cmakelists.txt cả với # trước enable_language nếu bạn không biên dịch cho ARM.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.