Bagaimana cara mengkompilasi dan menjalankan C / C ++ di terminal Unix console / Mac?

143

Bagaimana saya bisa mengkompilasi / menjalankan C atau C ++ di Unix console atau terminal Mac?

(Aku tahu itu, lupakan saja, dan pelajari kembali. Waktu untuk menuliskannya.)

PA
sumber

Jawaban:

188

Jika ini adalah program sumber tunggal sederhana:

make foo

di mana file sumbernya adalah foo.c atau foo.cpp, dll.

Anda bahkan tidak perlu makefile. Make memiliki cukup aturan bawaan untuk membuat file sumber Anda menjadi executable dengan nama yang sama, minus ekstensi.

Menjalankan executable yang baru saja dibangun sama dengan menjalankan program apa pun - tetapi Anda paling sering perlu menentukan path ke executable karena shell hanya akan mencari apa yang ada di dalam $PATHuntuk menemukan executable, dan paling sering itu tidak termasuk direktori saat ini ( .).

Jadi untuk menjalankan executable yang dibangun foo:

./foo
camh
sumber
Saya tidak menyadari aturan bawaan yang disebarkan ke target yang ditentukan saat menjalankan make. Mempelajari sesuatu yang baru hari ini =)
Branan
"-bash: make: command not found" <- Anda harus memiliki alat pengembang dan komponen tambahan diunduh.
dgig
17
Bukan make main.cpp, tapi make main.
Craig McMahon
@CraigMcMahon Terima kasih atas masukan Anda!
Hlawuleka MAS
Belajar sesuatu yang baru, ini luar biasa!
FossilizedCarlos
112
gcc main.cpp -o main.out  
./main.out
Andrey Neverov
sumber
31
sebagai noob saya punya banyak kesedihan karena tidak termasuk "./" ketika mengeksekusi
funk-shun
2
@ funk-shun Saya berharap komentar Anda adalah hasil teratas ketika googling hal semacam ini - butuh selamanya untuk mengetahuinya (untuk mac saya) - Terima kasih!
Cory W.
10
Saya menggunakan "gcc main.cpp -o main.out", dan mendapatkan kesalahan ini, Simbol tidak terdefinisi untuk arsitektur x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... ternyata alasannya adalah, tautan default gcc adalah libc. saat menggunakan g ++ akan terhubung dengan libstdc ++. Jadi gunakan "g ++ main.cpp -o main.out" mungkin lebih baik.
Rachel
1
@Rachel Saya juga mengalami masalah yang sama.
Goldname
1
Tentang Undefined symbols for architecture x86_64 masalah, saya memodifikasi perintah sebagai berikut:, gcc -lstdc++ main.cpp -o main.outdan itu berfungsi pada Mac saya. via tautan: stackoverflow.com/questions/11852568/…
rotoava
69

Ini adalah perintah yang berfungsi pada semua mesin Unix ... Saya menggunakannya di Linux / Ubuntu, tetapi juga berfungsi di OS X. Ketikkan perintah berikut di Terminal.app .

$ g++ -o lab21 iterative.cpp

-o adalah huruf O bukan nol

lab21 akan menjadi file yang dapat dieksekusi

iterative.cpp adalah file c ++ Anda

Setelah Anda menjalankan perintah itu ketikkan terminal berikut ini untuk menjalankan program Anda:

$ ./lab21
Komengem
sumber
1
Inilah yang bekerja untuk saya. Saya mencoba solusi lain di atas tanpa hasil. Terima kasih!
nmrichards
bekerja untuk saya juga, tidak perlu menginstal apa pun, solusi sempurna.
Chander Shakher Ghorela - Guru
33

Dua langkah untuk saya:

pertama:

make foo

kemudian:

./foo
Victor Augusto
sumber
1
./footidak tahu bagaimana jawaban yang diterima tidak memiliki bagian perintah yang penting ini
Suhaib
@ Suhaib Jawaban saya yang diterima tidak memiliki bagian dari perintah itu karena pertanyaan awal tidak memintanya. Itu berjudul "Bagaimana menjalankan C / C ++ di terminal Unix konsol / Mac" - yang saya tafsirkan sebagai "Bagaimana saya menjalankan kompiler c / c ++". Judul kemudian diubah menjadi "kompilasi dan jalankan". Saya telah memperbarui jawaban saya untuk mencerminkan pertanyaan yang berubah.
camh
15

Semua eksekusi aplikasi di lingkungan Unix (Linux, Mac OS X, AIX, dll.) Tergantung pada jalur pencarian yang dapat dieksekusi.

Anda dapat menampilkan jalur ini di terminal dengan perintah ini:

echo $ PATH

Pada Mac OS X (secara default) ini akan menampilkan jalur pencarian yang dipisahkan titik dua berikut:

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

Jadi setiap executable di direktori yang terdaftar dapat dijalankan hanya dengan mengetikkan namanya. Sebagai contoh:

cat mytextfile.txt

Ini menjalankan /bin/catdan menampilkan mytextfile.txt ke terminal.

Untuk menjalankan perintah lain yang tidak ada dalam jalur pencarian yang dapat dieksekusi, Anda harus memenuhi syarat untuk dapat dieksekusi. Jadi katakanlah saya mempunyai executable bernama MyProgram di direktori home saya di Mac OS XI yang dapat sepenuhnya memenuhi syarat seperti:

/ Pengguna / oliver / MyProgram

Jika Anda berada di lokasi yang dekat dengan program yang ingin Anda jalankan, Anda dapat memenuhi syarat nama dengan jalur parsial. Misalnya, jika MyProgramberada di direktori /Users/oliver/MyProjectI dan saya berada di direktori home saya, saya dapat memenuhi syarat nama yang dapat dieksekusi seperti ini, dan menjalankannya:

MyProject / MyProgram

Atau katakan saya berada di direktori /Users/oliver/MyProject2dan saya ingin menjalankan /Users/oliver/MyProject/MyProgramsaya dapat menggunakan jalur relatif seperti ini, untuk menjalankannya:

../MyProject/MyProgram

Demikian pula jika saya berada di direktori yang sama dengan MyProgramsaya harus menggunakan jalur relatif "direktori saat ini". Direktori saat ini Anda berada adalah karakter periode diikuti dengan garis miring. Sebagai contoh:

./MyProgram saya

Untuk menentukan direktori yang sedang Anda gunakan gunakan pwdperintah ini.

Jika Anda biasanya meletakkan program di hard disk Anda yang ingin Anda jalankan tanpa harus menyebutkan nama mereka. Misalnya, jika Anda memiliki direktori "bin" di direktori home Anda untuk skrip shell yang digunakan secara teratur dari program lain, mungkin bijaksana untuk mengubah jalur pencarian yang dapat dieksekusi.

Ini bisa dilakukan dengan mudah dengan membuat atau mengedit .bash_profilefile yang ada di direktori home Anda dan menambahkan baris:

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

Di sini karakter tilde (~) digunakan sebagai jalan pintas untuk / Users / oliver. Perhatikan juga bahwa baris hash bang (#!) Harus menjadi baris pertama dari file (jika belum ada). Perhatikan juga bahwa teknik ini mengharuskan shell login Anda menjadi bash (default pada Mac OS X dan sebagian besar distribusi Linux). Perhatikan juga bahwa jika Anda ingin agar program Anda yang diinstal ~/bindigunakan untuk preferensi pada sistem yang dapat dieksekusi, Anda harus menyusun ulang pernyataan ekspor sebagai berikut:

export PATH=~/bin:$PATH
orj
sumber
Jika Anda menambahkan komentar dari 'onebyone.livejournal.com' pada jawaban saya sendiri tentang keamanan, jawaban ini selesai. Terima kasih.
PA
10

Ryan, saya mengubah ini menjadi jawaban daripada komentar, karena sepertinya saya terlalu singkat. Lakukan semua ini di "Terminal".

Untuk menggunakan kompiler G ++, Anda perlu melakukan ini:

  1. Arahkan ke direktori tempat Anda menyimpan file * .cpp.

    cd ~/programs/myprograms/
    (~ adalah jalan pintas untuk rumah Anda, yaitu / Users / Ryan / programs / myprograms /, ganti dengan lokasi yang sebenarnya Anda gunakan.)

  2. Kompilasi

    g++ input.cpp -o output.bin (output.bin dapat berupa apa saja dengan ekstensi apa pun, sungguh. bin hanya umum di unix.)

    Seharusnya tidak ada yang dikembalikan jika berhasil, dan tidak apa - apa . Umumnya Anda mendapatkan pengembalian atas kegagalan.

    Namun, jika Anda mengetik ls, Anda akan melihat daftar file di direktori yang sama. Misalnya Anda akan melihat folder lain, input.cpp dan output.bin

  3. Dari dalam direktori, sekarang jalankan dengan ./outbut.bin

nerdwaller
sumber
Terima kasih, ini berhasil. Apakah Anda mengetahui tutorial yang menjelaskan hal-hal ini? Seperti apa sebenarnya arti G ++, apa tombol 'o' itu dan hal lain yang mungkin muncul?
Ryan
tambahkan komentar tentang maketidak akan bekerja karena tidak ada makefile.
Ryan, Anda dapat mengetik "man g ++" di terminal untuk mendapatkan "halaman manual" (yaitu manual, yang saya kira sudah tertanam oleh Apple). Saya belum melihat tutorial yang bagus. Meskipun, halaman manual pada g ++ mungkin cukup mendalam dengan CFLAGS dan segala macam opsi kompilasi lanjutan.
nerdwaller
Nitpick: "Seharusnya tidak ada apa-apa [dicetak] jika berhasil, dan tidak apa-apa. Umumnya Anda mendapatkan [output] pada kegagalan." Akan selalu ada nilai balik, 0 pada kesuksesan, non-0 pada kegagalan.
sepp2k
Digabungkan dari stackoverflow.com/questions/13714436/… (mencoba menggabungkan beberapa instruksi dasar untuk ini)
Shog9
9

Cara ringkas untuk melakukan itu bisa berupa:

make foo && ./$_

Senang memiliki one-liner sehingga Anda dapat menjalankan kembali executable Anda dengan mudah.

markthethomas
sumber
8

Dengan asumsi direktori saat ini tidak ada di jalur, sintaksnya adalah ./[name of the program].

Sebagai contoh ./a.out

PA
sumber
2
Bagus untukmu! Titik dan garis miring ada karena pada banyak sistem, direktori saat ini ("." Dalam istilah Unix) bukan bagian dari jalur yang dicari oleh shell. Jadi, menambahkannya membuatnya eksplisit program mana yang ingin Anda jalankan.
bersantai
7

Tambahkan berikut ini untuk mendapatkan peringatan terbaik, Anda tidak akan menyesalinya. Jika Anda bisa, kompilasi WISE (peringatan salah)

- Wall -pedantic -Weffc++ -Werror
Nazgob
sumber
Harus benar-benar default.
Konrad Rudolph
6

Untuk mengkompilasi program C atau C ++, ada perintah umum:

  1. make filename

  2. ./filename

make akan membuat file sumber Anda menjadi file yang dapat dieksekusi dengan nama yang sama. Tetapi jika Anda ingin menggunakan cara standar, Anda bisa menggunakan kompiler gcc untuk membangun program C & g ++ untuk c ++

Untuk C:

gcc filename.c

./a.out

Untuk C ++:

g++ filename.cpp

./a.out
Yogesh Nogia
sumber
2

Gunakan a makefile. Bahkan untuk proyek yang sangat kecil (= satu file), upaya tersebut mungkin sepadan karena Anda dapat memiliki beberapa set pengaturan kompiler untuk menguji berbagai hal. Debugging dan deployment bekerja lebih mudah dengan cara ini.

Baca makemanual , tampaknya cukup lama pada pandangan pertama tetapi sebagian besar Anda hanya bisa membaca sekilas. Secara keseluruhan, saya butuh beberapa jam dan membuat saya jauh lebih produktif.

Konrad Rudolph
sumber
Terima kasih, itu juga jawaban yang bagus. Saya benar-benar mencoba menggunakan make sebagai bubur yang saya bisa dan itu juga merupakan alasan bagi saya melupakan sintaks cara "mudah".
PA
2

cukup masukkan di direktori di mana file c / cpp Anda.

untuk mengkompilasi dan menjalankan kode c.

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

untuk mengkompilasi dan menjalankan kode c ++.

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

"$" adalah simbol terminal mac default

Shiv Prakash
sumber
2

Untuk mengkompilasi dan menjalankan kode sumber cpp dari terminal Mac kita perlu melakukan hal berikut:

  1. Jika path file cpp adalah somePath / fileName.cpp, pertama pergi direktori dengan path somePath
  2. Untuk mengkompilasi fileName.cpp, ketik c ++ fileName.cpp -o fileName
  3. Untuk menjalankan program, ketik ./fileName
Alper Gur
sumber
0

Menjalankan file .C menggunakan terminal adalah proses dua langkah. Langkah pertama adalah mengetikkan gcc di terminal dan menjatuhkan file .C ke terminal, lalu tekan Enter:

username$ gcc /Desktop/test.c 

Di langkah kedua, jalankan perintah berikut:

username$ ~/a.out
Himanshu Mahajan
sumber
0

Untuk menjalankan file c ++, jalankan perintah di bawah ini, Mengasumsikan nama file adalah "main.cpp"

1.Compile untuk membuat file objek dari file c ++.

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

2. Karena #include <conio.h>tidak mendukung di MacOS maka kita harus menggunakan alternatifnya yang mendukung di Mac #include <curses.h>. Sekarang file objek perlu dikonversi ke file yang dapat dieksekusi. Untuk menggunakan curses.hkita harus menggunakan perpustakaan -lcurses.

g++ -o main main.o -lcurses

3. Sekarang jalankan executable.

./main
Teena nath Paul
sumber