Sử dụng CMakeLists.txt và tiện ích cmake để build mã nguồn C/C++
Contents
CMake là công cụ giúp sinh Makefile từ tệp CMakeLists.txt. Công cụ này giúp đơn giản hóa việc tạo Makefile vì cú pháp Makefile khá phức tạp trong khi cú pháp của CMakeLists.txt thì đơn giản và rõ ràng hơn nhiều. Để cài đặt CMake trên Ubuntu bạn đánh lệnh sau:
sudo apt-get install cmake
Còn trên Windows, thì bạn tải trực tiếp từ trang [1] và thực hiện cài đặt bình thường.
Build ứng dụng với cmake
Để build ứng dụng sử dụng CMake, bạn bật Terminal, vào thư mục chứa tệp CMakeLists.txt sau đó đánh các lệnh sau:
cmake .
Sau khi đánh lệnh này xong thì Makefile được tạo tự động, sau đó bạn dùng lệnh make để build bình thường:
make clean
make
sudo make install
Sau khi đánh lệnh cmake, rất nhiều tệp trung gian được tạo, do đó đôi khi gây lẫn với thư mục gốc ban đầu của bạn. Vì thế, để tránh vấn đề này, bạn nên để hết các tệp trung gian vào thư muc khác như build chẳng hạn bằng cách đánh lệnh sau:
mkdir build
cd build
cmake ..
Ngoài ra, nếu trong nếu trong CMakeLists.txt sử dụng các biến mà lại chưa được thiết lập trong tệp thì bạn phải thiết lập biến này trong lệnh cmake theo định dạng:
cmake .. -D<Variable1>=<Value1> -D<Variable2>=<Value2> -D<Variable3>=<Value3>
Ví dụ:
cmake .. -DCOMMON_PATH=/home/test/common
Chọn trình dịch với CMake
Nhiều lúc bạn không muốn sử dụng trình dịch mặc định mà muốn CMake sử dụng đích danh 01 trình dịch nào đó. Khi đó trong lệnh CMake, bạn sử dụng thêm tham số -G theo sau là "generator". Bạn chọn một trong các cú pháp sử dụng sau:
cmake.exe -G "Visual Studio 11" ..
cmake.exe -G "Visual Studio 11 2012" ..
cmake -DCMAKE_GENERATOR="Visual Studio 11 2012" ..
Chi tiết xem link: https://stackoverflow.com/questions/33917454/cmake-how-to-specify-the-version-of-visual-c-to-work-with
Ví dụ trên Windows, bạn muốn yêu cầu CMake sử dụng trình biên dịch của Visual Studio 2013 (Tức Visual Studio 12), bạn sử dụng một trong hai lệnh sau:
cmake -G "Visual Studio 12" .
cmake -G "Visual Studio 12 2013" .
=> Sau lệnh này cmake sẽ tạo ra tệp solution (*.sln) mở với Visual Studio 2013.
Lệnh sau build với Visual Studio 2015 (Tức Visual Studio 14):
cmake -G "Visual Studio 14" .
cmake -G "Visual Studio 14 2015" .
=> Sau lệnh này cmake sẽ tạo ra tệp solution (*.sln) mở với Visual Studio 2015.
Lệnh sau để build với MinGW:
cmake -G "MinGW Makefiles" .
Sau đó dùng lệnh sau để build:
mingw32-make
Nếu bạn muốn biết các generator được hỗ trợ bởi CMake bạn sử dụng lệnh sau:
cmake --help
và xem ở phần "Generators":
Trên Windows bạn sẽ thấy như sau:
Generators The following generators are available on this platform: Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 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". Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files. Optional [arch] can be "Win64" or "IA64". Visual Studio 8 2005 [arch] = Deprecated. Generates Visual Studio 2005 project files. Optional [arch] can be "Win64". Borland Makefiles = Generates Borland makefiles. NMake Makefiles = Generates NMake makefiles. NMake Makefiles JOM = Generates JOM makefiles. Green Hills MULTI = Generates Green Hills MULTI files (experimental, work-in-progress). MSYS Makefiles = Generates MSYS makefiles. MinGW Makefiles = Generates a make file for use with mingw32-make. Unix Makefiles = Generates standard UNIX makefiles. Ninja = Generates build.ninja files. Watcom WMake = Generates Watcom WMake makefiles. CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files. CodeBlocks - NMake Makefiles = Generates CodeBlocks project files. CodeBlocks - NMake Makefiles JOM = Generates CodeBlocks project files. CodeBlocks - Ninja = Generates CodeBlocks project files. CodeBlocks - Unix Makefiles = Generates CodeBlocks project files. CodeLite - MinGW Makefiles = Generates CodeLite project files. CodeLite - NMake Makefiles = Generates CodeLite project files. CodeLite - Ninja = Generates CodeLite project files. CodeLite - Unix Makefiles = Generates CodeLite project files. Sublime Text 2 - MinGW Makefiles = Generates Sublime Text 2 project files. Sublime Text 2 - NMake Makefiles = Generates Sublime Text 2 project files. Sublime Text 2 - Ninja = Generates Sublime Text 2 project files. Sublime Text 2 - Unix Makefiles = Generates Sublime Text 2 project files. Kate - MinGW Makefiles = Generates Kate project files. Kate - NMake Makefiles = Generates Kate project files. Kate - Ninja = Generates Kate project files. Kate - Unix Makefiles = Generates Kate project files. Eclipse CDT4 - NMake Makefiles = Generates Eclipse CDT 4.0 project files. Eclipse CDT4 - MinGW Makefiles = Generates Eclipse CDT 4.0 project files. Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files. Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
Trên Ubuntu 16 bạn sẽ thấy danh sách như sau:
Generators The following generators are available on this platform: Unix Makefiles = Generates standard UNIX makefiles. Ninja = Generates build.ninja files. Watcom WMake = Generates Watcom WMake makefiles. CodeBlocks - Ninja = Generates CodeBlocks project files. CodeBlocks - Unix Makefiles = Generates CodeBlocks project files. CodeLite - Ninja = Generates CodeLite project files. CodeLite - Unix Makefiles = Generates CodeLite project files. Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files. Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files. KDevelop3 = Generates KDevelop 3 project files. KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files. Kate - Ninja = Generates Kate project files. Kate - Unix Makefiles = Generates Kate project files. Sublime Text 2 - Ninja = Generates Sublime Text 2 project files. Sublime Text 2 - Unix Makefiles = Generates Sublime Text 2 project files.
Một số lỗi khi sử dụng CMake
Lỗi: "sh.exe was found in your PATH"
Khi chạy lệnh CMake trên Windows, nhiều khi bạn gặp thông báo lỗi như sau:
sh.exe was found in your PATH, here: C:/MinGW/msys/1.0/bin/sh.exe For MinGW make to work correctly sh.exe must NOT be in your path. Run cmake from a shell that does not have sh.exe in your PATH.
Lỗi này thường do CMake không tìm thấy tệp sh.exe hoặc tìm thấy nhưng không đúng trong thư mục cần. Trong trường hợp này bạn thêm tham số sau để có thể chạy được CMake: -DCMAKE_SH="CMAKE_SH-NOTFOUND"
cmake -DCMAKE_SH="CMAKE_SH-NOTFOUND" .
cmake -G "MinGW Makefiles" -DCMAKE_SH="CMAKE_SH-NOTFOUND" ..
Cấu trúc của một tệp CMakeLists.txt