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ử
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
Đ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.log
bấ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
| CompilerIdCXX
trự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
Cố gắng chọn đúng phiên bản trình tạo :
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
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 VS2015
tắ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)
Bạn khởi động trình bash
bao MSys msys.bat
và 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 gcc
và đ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.
Nếu nó vẫn không hoạt động, hãy thử đặt CXX
trự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-make
chương trình được phân phối với MinGW
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 ++ và 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.exe
trê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
).