2009-11-18 140 views
5

Làm cách nào để biên dịch chương trình C++ của tôi trong Cygwin. Tôi đã cài đặt gcc. Tôi nên sử dụng lệnh nào? Ngoài ra, làm cách nào để chạy ứng dụng bảng điều khiển của tôi khi nó ở trong phần mở rộng .cpp. Tôi đang cố gắng để tìm hiểu C + + với một số chương trình nhỏ, nhưng trong Visual C++, tôi không muốn phải tạo ra một dự án riêng biệt cho mỗi tập tin .cpp nhỏ.Biên dịch C++ với Cygwin

Trả lời

12

Bạn cần phải sử dụng một lệnh như:

g++ -o prog prog.cpp 

Đó là một hình thức đơn giản mà sẽ biến một ++ Dự án một file C thành một thực thi. Nếu bạn có nhiều tệp C++, bạn có thể làm:

g++ -o prog prog.cpp part2.cpp part3.cpp 

nhưng cuối cùng, bạn sẽ muốn giới thiệu makefiles để thuận tiện để bạn chỉ phải biên dịch các bit đã thay đổi. Sau đó, bạn sẽ kết thúc với một Makefile như:

prog: prog.o part2.o part3.o 
    g++ -o prog prog.o part2.o part3.o 

prog.o: prog.cpp 
    g++ -c -o prog.o prog.cpp 

part2.o: part2.cpp 
    g++ -c -o part2.o part2.cpp 

part3.o: part3.cpp 
    g++ -c -o part3.o part3.cpp 

sau đó, bạn sẽ bắt đầu tìm cách viết makefiles của bạn để làm cho họ linh hoạt hơn (chẳng hạn như không cần một quy tắc riêng cho từng tập tin C++), nhưng điều đó có thể được để lại cho một câu hỏi khác.

Về việc có một dự án riêng biệt cho mỗi tệp C++, điều đó không cần thiết chút nào. Nếu bạn đã có tất cả trong một thư mục và có một bản đồ đơn giản của C++ file sang file thực thi, bạn có thể sử dụng makefile như sau:

SRCS=$(wildcard *.cpp) 
EXES=$(SRCS:.cpp=.exe) 

all: $(EXES) 

%.exe: %.cpp 
    g++ -o [email protected] $^ 

Sau đó chạy lệnh make và nó sẽ (thông minh) tạo mọi của bạn thực thi. [email protected] là mục tiêu và $^ là danh sách các điều kiện tiên quyết.

Và nếu bạn có các quy tắc phức tạp hơn, chỉ cần tack chúng xuống ở dưới cùng. quy tắc cụ thể sẽ được lựa chọn thay cho các quy tắc mẫu:

SRCS=$(wildcard *.cpp) 
EXES=$(SRCS:.cpp=.exe) 

all: $(EXES) 

%.exe: %.cpp 
    g++ -o [email protected] $^ 

xx.exe: xx.cpp xx2.cpp xx3.cpp 
    g++ -o [email protected] $^ 
    echo Made with special rule. 
+0

Cảm ơn. Nhưng tôi có thể tạo một makefile đơn mà biên dịch bất kỳ tệp C++ nào trong cùng thư mục thay vì tạo một tệp makefile cho mỗi tệp .cpp cụ thể không? –

+0

Tiện ích mở rộng là gì? .chế tạo? Hoặc không có phần mở rộng như myMakefile –

+0

@Mohit, những makefiles đó biên dịch bất kỳ tệp cpp nào thành exe tương đương (ký tự đại diện và mẫu '%' nhìn thấy điều đó). Theo quy ước, tập tin được gọi là Makefile hoặc makefile. Bạn có thể sử dụng tên khác như bob.mk nhưng sau đó bạn phải làm 'make -f bob.mk all' thay vì chỉ 'make all'. – paxdiablo

4

Bạn sẽ cần g + +. Sau đó, hãy thử g++ file.cpp -o file.exe làm khởi đầu. Sau đó bạn có thể tránh được việc đánh máy bằng cách tìm hiểu về Makefiles.

0

nếu bạn muốn sử dụng Cygwin bạn nên sử dụng bình thường gcc cú pháp

g++ -o foobar foobar.cpp 

nhưng điều đó không thực sự chơi tốt với Visual C++ . Tôi khuyên bạn hãy xem xét Eclipse CDT nếu bạn thích sử dụng GCC hơn trình biên dịch C++ trực quan.

0

Những gì tôi làm để biên dịch một chương trình cpp:

g++ -Wall Test.cpp -o Test 
-Wall enables warning and error messages to be shown 
-o Test creates an Test.exe after compilation 

Nếu bạn muốn biên dịch các file riêng biệt:

g++ -Wall -c File1.cpp 
g++ -Wall -c File2.cpp 

Bây giờ, tạo một thực thi với các tập tin đối tượng kết hợp như:

g++ -Wall File1.o File2.o -o File.exe 

Bằng cách này bạn có thể biên dịch các tệp tiêu đề của mình và bạn có thể đưa vào các chương trình ứng dụng của mình.

Các vấn đề liên quan