Biên dịch code C++ từ command line

Manh

December 7, 2015

C++

Chúng ta đã sử dụng IDE kể từ khi bắt đầu học lập trình, liệu việc biên dịch từ dòng lệnh có giúp ích gì không nhỉ? Câu hỏi này cũng khó trả lời bởi nếu đã quen với những thứ tiện lợi, one-click mà không phải nghĩ ngợi nhiều, thì thường người học sẽ ngại làm việc với command line. Điều đó hoàn toàn đúng, sử dụng dòng lệnh sẽ gây nhiều khó khăn cho bạn để làm quen, vấn đề ở đây là không hề có công cụ tốt nhất, nhưng nếu biết sử dụng nhiều công cụ, bạn sẽ biết cách áp dụng đúng cho trường hợp của bạn để tiến tới việc tăng hiệu quả công việc. Các công cụ mạnh mẽ như Visual Studio có thể giúp bạn biên dịch code của mình dễ dàng, nhưng điều đó chưa đủ bởi bạn sẽ cần dùng đến nhiều thư viện, công cụ khác, và hầu hết trong số đó, để sử dụng được đều có những bước dùng tới dòng lệnh.Vậy nên mình viết bài này nhằm nêu ra những bước đơn giản để biên dịch mã nguồn C++, sử dụng MinGW.

1. Cài đặt MinGW

(Dev-C++ và Code::Blocks (bản có kèm trình dịch) thì trong thư mục cài đặt của 2 IDE này đã kèm theo MinGW)

MinGW là gì?

MinGW là từ viết tắt của Minimalist GNU for Windows: môi trường phát triển tối giản sử dụng các công cụ GNU cho Windows.

Để cài đặt bản MinGW bản mới nhất, bạn vào website http://mingw.org và bấm vào Download Installer ở bên phải. Sau khi cài đặt, bạn chạy Installation Manager của nó và cài đặt những gói sau (bấm chuột phải và chọn Mark for Installation, sau đó lên thanh Menu chọn Installation -> Apply Changes):

mingw32-base

mingw32-gcc-g++

msys-base (nếu bạn muốn sử dụng một số công cụ phổ biến của Linux)

Cài đặt MinGW khá là đơn giản. Nếu đã có MinGW, bạn cài đặt biến môi trường theo bài viết sau để có thể gọi trình dịch trên dòng lệnh.

Xem bài viết Biến môi trường PATH

Giá trị được thêm vào biến PATH chính là folder bin của thư mục nơi mà bạn cài MinGW.

2. Biên dịch mã nguồn C++

Giả sử tôi có một đoạn code:

#include <iostream>
 
int main() {
  std::cout << "Hello World!" << std::endl;
  return 0;
}

Chúng ta có thể biên dịch và chạy chương trình như sau:

(Tất cả những dòng lệnh này đều giống với dòng lệnh trên Linux)

Bạn vào Run và gõ cmd (có thể dùng tổ hợp phím Windows + R)

g++ -o tên_chương_trình_không_có_dot_exe hello.cpp

Ví dụ:

g++ -o hello hello.cpp

sẽ biên dịch ra file thực thi tên hello.exe

Trên môi trường Linux hoặc OSX, file thực thi sẽ không có đuôi .exe như Windows

Vậy nên cú pháp để biên dịch một chương trình đơn giản đó là:

g++ -o program_name source_file.cpp

Một trường hợp khác, giả sử rằng mã nguồn của bạn include một file header của thư viện được cài đặt ở đâu đó, có thể là thư viện được cài bởi các SDK: thư viện Windows, Direct3D,… hoặc thư viện do bạn tự cài đặt, bạn sẽ cần trình biên dịch biết đến đường dẫn này để tìm kiếm file header. Switch sẽ giúp bạn đó là -I.

Ví dụ:

g++ -o hello hello.cpp -I./libs/mylib/

Trường hợp giả định này tôi có một folder libs chứa các thư viện và folder này nằm cùng thư mục với file mã nguồn tôi muốn biên dịch, vậy nên đường dẫn tương đối (bạn có thể dùng đường dẫn tuyệt đối) là ./libs/mylib

Để chạy chương trình, trên command prompt của Windows bạn chỉ cần gõ tên của chương trình đó.

Comments

comments

Related Posts

Hãy dừng việc sử dụng fflush(stdin) để xóa dòng nhập

Manh

March 16, 2016

C++

1. Hiện thực – Lập trình C được giảng dạy ở Việt Nam một cách rất “hỗn tạp” – Vì chỉ được coi là một môn học “nhập môn” nên giảng dạy khá “cẩu thả” – C không xứng đáng là để dạy nhập môn, hãy dạy nó chuyên sâu: Vì sao lại khiến một […]

Read More

Modern C++: Functors

Manh

March 11, 2016

C++

1. Functor là gì? Nếu như là một fan trung thành của C++ STL (Standard Template Library), bạn sẽ bắt gặp functor rất nhiều. Ví dụ trong đoạn code sau: #include <iostream> #include <vector> #include <algorithm>   void increment(int& i) { ++i; std::cout << i << ' '; }   int main() { std::vector<int> v […]

Read More