Làm cách nào để biên dịch và chạy C / C ++ trong thiết bị đầu cuối Unix console / Mac?


142

Làm cách nào tôi có thể biên dịch / chạy C hoặc C ++ trong bảng điều khiển Unix hoặc thiết bị đầu cuối Mac?

(Tôi biết điều đó, quên nó đi và học lại lần nữa. Thời gian để viết nó xuống.)

Câu trả lời:


187

Nếu nó là một chương trình nguồn đơn giản:

make foo

trong đó tệp nguồn là foo.c hoặc foo.cpp, v.v.

Bạn thậm chí không cần một makefile. Make có đủ các quy tắc dựng sẵn để xây dựng tệp nguồn của bạn thành một tệp thực thi cùng tên, trừ phần mở rộng.

Chạy chương trình thực thi vừa được xây dựng cũng giống như chạy bất kỳ chương trình nào - nhưng bạn thường sẽ cần chỉ định đường dẫn đến tệp thực thi vì shell sẽ chỉ tìm kiếm những gì có trong $PATHđể tìm tệp thực thi và thường không bao gồm thư mục hiện tại ( .).

Vì vậy, để chạy thực thi được xây dựng foo:

./foo

Tôi đã không nhận ra các quy tắc dựng sẵn được truyền đến các mục tiêu được chỉ định khi gọi thực hiện. Đã học được điều gì đó mới hôm nay =)
Branan

"-Bash: make: lệnh không tìm thấy" <- Bạn phải có công cụ dành cho nhà phát triển và các thành phần bổ sung được tải xuống.
dgig

17
Không phải make main.cpp, nhưng make main.
Craig McMahon

@CraigMcMahon Cảm ơn bạn đã đóng góp!
Hlawuleka MAS 16/07/2016

Đã học được điều gì đó mới mẻ, điều này thật tuyệt!
Hóa thạchCarlos

112
gcc main.cpp -o main.out  
./main.out

31
với tư cách là một người mới, tôi đã rất đau buồn vì không bao gồm "./" khi thực hiện
funk-shun

2
@ funk-shun Tôi muốn bình luận của bạn là kết quả hàng đầu khi googling loại điều này - đưa tôi mãi mãi để tìm ra điều đó (cho mac của tôi) - Cảm ơn!
Cory W.

10
Tôi đã sử dụng "gcc main.cpp -o main.out" và nhận được lỗi này, các ký hiệu không xác định cho kiến ​​trúc x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... hóa ra lý do là, gcc default-links là libc. trong khi sử dụng g ++ sẽ liên kết với libstdc ++. Vì vậy, sử dụng "g ++ main.cpp -o main.out" có thể tốt hơn.
Rachel

1
@Rachel Mình cũng gặp vấn đề tương tự.
Goldname

1
Về Undefined symbols for architecture x86_64 vấn đề, tôi sửa đổi lệnh như sau: gcc -lstdc++ main.cpp -o main.outvà nó hoạt động trên máy Mac của tôi. thông qua liên kết: stackoverflow.com/questions/11852568/
Mạnh

69

Đây là lệnh hoạt động trên tất cả các máy Unix ... Tôi sử dụng nó trên Linux / Ubuntu, nhưng nó cũng hoạt động trong OS X. Nhập lệnh sau trong Terminal.app .

$ g++ -o lab21 iterative.cpp

-o là chữ O không bằng không

lab21 sẽ là tập tin thực thi của bạn

iterative.cpp là tập tin c ++ của bạn

Sau khi bạn chạy lệnh đó, hãy nhập lệnh sau trong terminal để chạy chương trình của bạn:

$ ./lab21

1
Đây là những gì làm việc cho tôi. Tôi đã thử các giải pháp khác ở trên mà không gặp may mắn. Cảm ơn!
bước sóng

làm việc cho tôi là tốt, không cần phải cài đặt bất cứ điều gì, giải pháp hoàn hảo.
Chander Shakher Ghorela - Đạo sư

33

Hai bước cho tôi:

Đầu tiên:

make foo

sau đó:

./foo

1
./foodunno làm thế nào câu trả lời được chấp nhận không có phần lệnh quan trọng này
Suhaib

@Suhaib Câu trả lời được chấp nhận của tôi không có phần lệnh đó vì câu hỏi ban đầu không yêu cầu. Nó có tiêu đề "Cách chạy C / C ++ trong giao diện điều khiển Unix / Mac" - mà tôi hiểu là "Cách chạy trình biên dịch c / c ++". Tiêu đề sau đó đã được thay đổi thành "biên dịch và chạy". Tôi đã cập nhật câu trả lời của mình để phản ánh câu hỏi đã thay đổi.
camh

15

Tất cả thực thi ứng dụng trong môi trường Unix (Linux, Mac OS X, AIX, v.v.) phụ thuộc vào đường dẫn tìm kiếm thực thi.

Bạn có thể hiển thị đường dẫn này trong terminal bằng lệnh này:

tiếng vang $ PATH

Trên Mac OS X (theo mặc định), điều này sẽ hiển thị đường dẫn tìm kiếm được phân tách bằng dấu hai chấm sau:

/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Vì vậy, bất kỳ thực thi trong các thư mục được liệt kê có thể bằng cách chạy chỉ bằng cách gõ tên của họ. Ví dụ:

mèo mytextfile.txt

Điều này chạy /bin/catvà hiển thị mytextfile.txt cho thiết bị đầu cuối.

Để chạy bất kỳ lệnh nào khác không có trong đường dẫn tìm kiếm thực thi, đòi hỏi bạn phải đủ điều kiện đường dẫn đến tệp thực thi. Vì vậy, giả sử tôi có một chương trình thực thi có tên MyProgram trong thư mục nhà của tôi trên Mac OS XI hoàn toàn có thể đủ điều kiện như vậy:

/ Người dùng / oliver / Chương trình của tôi

Nếu bạn đang ở một địa điểm gần chương trình bạn muốn thực hiện, bạn có thể đủ điều kiện đặt tên với một đường dẫn một phần. Ví dụ: nếu MyProgramtrong thư mục /Users/oliver/MyProjecttôi và tôi ở trong thư mục nhà của tôi, tôi có thể đủ điều kiện tên thực thi như thế này và để nó thực thi:

MyProject / MyProgram

Hoặc nói rằng tôi đã ở trong thư mục /Users/oliver/MyProject2và tôi muốn thực thi /Users/oliver/MyProject/MyProgramTôi có thể sử dụng một đường dẫn tương đối như thế này, để thực thi nó:

../MyProject/MyProgram

Tương tự như vậy nếu tôi ở cùng thư mục với MyProgramtôi cần sử dụng đường dẫn tương đối "thư mục hiện tại". Thư mục hiện tại bạn đang ở là ký tự dấu chấm theo sau dấu gạch chéo. Ví dụ:

./Chương trình của tôi

Để xác định thư mục nào bạn hiện đang sử dụng pwdlệnh.

Nếu bạn thường đặt các chương trình ở một vị trí trên đĩa cứng mà bạn muốn chạy mà không cần phải đủ điều kiện để đặt tên cho chúng. Ví dụ: nếu bạn có một thư mục "bin" trong thư mục chính của bạn cho các tập lệnh shell được sử dụng thường xuyên của các chương trình khác, có thể là khôn ngoan để thay đổi đường dẫn tìm kiếm thực thi của bạn.

Điều này có thể được thực hiện dễ dàng bằng cách tạo hoặc chỉnh sửa .bash_profiletệp hiện có trong thư mục chính của bạn và thêm các dòng:

#!/bin/sh
export PATH=$PATH:~/bin

Ở đây, ký tự dấu ngã (~) đang được sử dụng làm lối tắt cho / Users / oliver. Cũng lưu ý rằng dòng băm (#!) Cần phải là dòng đầu tiên của tệp (nếu nó chưa tồn tại). Cũng lưu ý rằng kỹ thuật này yêu cầu shell đăng nhập của bạn phải bash (mặc định trên Mac OS X và hầu hết các bản phân phối Linux). Cũng lưu ý rằng nếu bạn muốn các chương trình của mình được cài đặt ~/binđược sử dụng theo sở thích để thực thi hệ thống, bạn nên sắp xếp lại câu lệnh xuất như sau:

export PATH=~/bin:$PATH

Nếu bạn thêm các nhận xét từ 'onitherone.livejournal.com' vào câu trả lời của riêng tôi về bảo mật thì câu trả lời này đã hoàn tất. Cảm ơn bạn.
PA

10

Ryan, tôi đang thay đổi điều này thành một câu trả lời thay vì bình luận, vì có vẻ như tôi quá ngắn gọn. Làm tất cả những điều này trong "Terminal".

Để sử dụng trình biên dịch G ++, bạn cần làm điều này:

  1. Điều hướng đến thư mục mà bạn đã lưu trữ tệp * .cpp.

    cd ~/programs/myprograms/
    (~ là lối tắt cho nhà của bạn, tức là / Người dùng / Ryan / chương trình / myprograms /, thay thế bằng vị trí bạn thực sự sử dụng.)

  2. Biên dịch nó

    g++ input.cpp -o output.bin (output.bin có thể là bất cứ điều gì với bất kỳ tiện ích mở rộng nào, thực sự. bin chỉ phổ biến trên unix.)

    Không nên trả lại nếu nó thành công, và điều đó không sao . Nói chung, bạn nhận được lợi nhuận từ thất bại.

    Tuy nhiên, nếu bạn nhập ls, bạn sẽ thấy danh sách các tệp trong cùng thư mục. Ví dụ: bạn sẽ thấy các thư mục khác, input.cpp và output.bin

  3. Từ trong thư mục, bây giờ thực hiện nó với ./outbut.bin


Cảm ơn điều này đã làm việc. Bạn có thể biết bất kỳ hướng dẫn nào sẽ giải thích những điều này? Giống như chính xác G ++ nghĩa là gì, công tắc 'o' là gì và bất cứ điều gì khác có thể xảy ra?
Ryan

thêm một bình luận về việc makekhông làm việc vì không có makefile.

Ryan, bạn có thể nhập "man g ++" trong thiết bị đầu cuối để lấy "trang man" (tức là hướng dẫn sử dụng, mà tôi đoán là Apple đã nhúng). Tôi chưa thấy hướng dẫn tuyệt vời nào. Mặc dù, trang man trên g ++ có thể có chiều sâu với CFLAGS và tất cả các loại tùy chọn biên dịch nâng cao.
nerdwaller

Nitpick: "Không nên [in] nếu nó thành công, và điều đó không sao. Nói chung, bạn nhận được [đầu ra] khi thất bại." Sẽ luôn có giá trị trả về, 0 khi thành công, không 0 khi thất bại.
sepp2k

Được hợp nhất từ stackoverflow.com/questions/13714436/ (cố gắng củng cố một số hướng dẫn cơ bản cho việc này)
Shog9

9

Một cách nhỏ gọn để làm điều đó có thể là:

make foo && ./$_

Rất vui khi có một lớp lót để bạn có thể chạy lại tệp thực thi của mình một cách dễ dàng.


8

Giả sử thư mục hiện tại không có trong đường dẫn, cú pháp là ./[name of the program].

Ví dụ ./a.out


2
Tốt cho bạn! Dấu chấm và dấu gạch chéo có ở đó bởi vì trên nhiều hệ thống, thư mục hiện tại ("." Theo thuật ngữ Unix) không phải là một phần của đường dẫn được tìm kiếm bởi trình bao. Vì vậy, thêm nó làm cho nó rõ ràng chương trình bạn muốn chạy.
thư giãn

7

Thêm vào sau để có được cảnh báo tốt nhất, bạn sẽ không hối tiếc. Nếu bạn có thể, hãy biên dịch WISE (cảnh báo là lỗi)

- Wall -pedantic -Weffc++ -Werror

Nên thực sự là mặc định.
Konrad Rudolph

6

Để biên dịch chương trình C hoặc C ++, có một lệnh chung:

  1. make filename

  2. ./filename

make sẽ xây dựng tệp nguồn của bạn thành một tệp thực thi có cùng tên. Nhưng nếu bạn muốn sử dụng cách tiêu chuẩn, Bạn có thể sử dụng trình biên dịch gcc để xây dựng chương trình C & g ++ cho c ++

Đối với C:

gcc filename.c

./a.out

Đối với C ++:

g++ filename.cpp

./a.out

2

Sử dụng a makefile. Ngay cả đối với các dự án rất nhỏ (= một tệp), nỗ lực có thể đáng giá vì bạn có thể có một vài bộ cài đặt trình biên dịch để kiểm tra mọi thứ. Gỡ lỗi và triển khai hoạt động dễ dàng hơn nhiều theo cách này.

Đọc makehướng dẫn , nó có vẻ khá dài thoạt nhìn nhưng hầu hết các phần bạn chỉ có thể lướt qua. Tất cả trong tất cả nó đã làm tôi mất một vài giờ và làm cho tôi năng suất hơn nhiều.


Cảm ơn bạn, đó là một câu trả lời tốt quá. Tôi thực sự cố gắng sử dụng make như tôi có thể và đó cũng là một lý do khiến tôi quên mất cú pháp của cách "dễ dàng".
PA


2

chỉ cần nhập vào thư mục chứa tập tin c / cpp của bạn.

để biên dịch và chạy mã c.

$gcc filename.c
$./a.out filename.c

để biên dịch và chạy mã c ++.

$g++ filename.cpp
$./a.out filename.cpp

"$" là ký hiệu thiết bị đầu cuối mac mặc định


2

Để biên dịch và chạy mã nguồn cpp từ thiết bị đầu cuối Mac, bạn cần thực hiện các bước sau:

  1. Nếu đường dẫn của tệp cpp là somePath / fileName.cpp, trước tiên hãy vào thư mục có đường dẫn somePath
  2. Để biên dịch fileName.cpp, nhập c ++ fileName.cpp -o fileName
  3. Để chạy chương trình, nhập ./fileName

0

Chạy tệp .C bằng thiết bị đầu cuối là một quá trình gồm hai bước. Bước đầu tiên là nhập gcc trong thiết bị đầu cuối và thả tệp .C vào thiết bị đầu cuối, sau đó nhấn Enter:

username$ gcc /Desktop/test.c 

Trong bước thứ hai, chạy lệnh sau:

username$ ~/a.out

0

Để chạy các tệp c ++ chạy bên dưới lệnh, Giả sử tên tệp là "main.cpp"

1.Compile để tạo tệp đối tượng từ tệp c ++.

g++ -c main.cpp -o main.o

2.Since #include <conio.h>không hỗ trợ trong MacOS, vì vậy chúng ta nên sử dụng giải pháp thay thế hỗ trợ trong Mac #include <curses.h>. Bây giờ tập tin đối tượng cần phải được chuyển đổi thành tập tin thực thi. Để sử dụng curses.hchúng ta phải sử dụng thư viện -lcurses.

g++ -o main main.o -lcurses

3. Bây giờ chạy thực thi.

./main
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.