CMake là công cụ để từ các file mã nguồn, nó tạo ra bộ project tương ứng, kiêm luôn công cụ biên tập code, macro. Từ đó bạn có thể build tiếp project đó. Nó là 1 ứng dụng nổi tiếng và quen thuộc với người yêu thích mã nguồn mở. Ứng dụng này có mục đích làm giảm dung lượng các file chia sẻ trên mạng bằng cách tạo ra các file config cần thiết cho project, khi đó người chia sẻ source và người sử dụng chỉ cần chia sẻ những file code mà thôi. Cmake hỗ trợ rất nhiều project của nhiều ngôn ngữ khác nhau, nhiều phiên bản của các IDE nổi tiếng và nhiều option để người dùng lựa chọn.
Ví dụ 1: Một project C++ chạy bằng Visual studio: project cần các file như *.sln, *.vcxproj, vcxproj.filters,… chứa thông tin về project, như là project đó cần compile những file nào, solution có bao nhiêu project, project build trên platform nào,… thì Cmake sẽ tạo ra các file đó giùm bạn. Còn nếu không có Cmake thì sao? Người chia sẻ file sẽ phải tạo ra các file config với mỗi phiên bản IDE, chỉ riêng Visual Studio đã có nhiều phiên bản: VS2008, VS2010, VS2012, VS2013, VS2015. Cộng thêm các ngôn ngữ khác nữa thì số lượng file phải tạo ra quá nhiều. Làm cho dung lượng file chia sẻ tăng lên đáng kể.
Ví dụ 2: Bạn đang có một project C++ và muốn build trên cả Windows, macOS và Linux. Nhưng đời không như mơ khi mà Windows có Visual Studio solution, macOS có XCode projects và Linux (*nix) có Makefile.
Codebase của bạn đang có 1,696 files và bạn không thể viết mà maintain riêng cả 3 projects cho 3 nền tảng, hoặc bạn đang viết giữa chừng nhưng có nhu cầu port qua nền tảng khác.Ý tưởng của CMake là bạn viết một script có tên CMakeLists.txt và chạy nó trên platform mà bạn muốn sinh project files, bạn chạy trên Linux, CMake sẽ sinh Makefile ra để bạn build project, chạy trên Windows, CMake sẽ sinh solution cho VS, và vân vân.
CMake không phải là trình biên dịch, tác dụng của CMake chỉ là generate build files để trình biên dịch của bạn thực hiện công việc build sau đó.