Bir Unix konsol / Mac terminalinde C / C ++ nasıl derlenir ve çalıştırılır?


144

Unix konsolunda veya Mac terminalinde C veya C ++ 'ı nasıl derleyebilir / çalıştırabilirim?

(Biliyorum, unut ve tekrar öğren. Yazma zamanı.)

Yanıtlar:


188

Basit tek kaynaklı bir programsa:

make foo

burada kaynak dosya foo.c veya foo.cpp vb.

Bir makyaj dosyasına bile ihtiyacınız yok. Make, kaynak dosyanızı eksi uzantı ile aynı adlı bir yürütülebilir dosyaya oluşturmak için yeterli yerleşik kurala sahiptir.

Sadece inşa edilen yürütülebilir dosyayı çalıştırmak herhangi bir programı çalıştırmakla aynıdır - ancak kabuk yalnızca $PATHyürütülebilir dosyaları bulmak için neler olduğunu ve çoğunlukla geçerli dizini içermeyen (örneğin, geçerli dizini içermeyen) yürütülebilir dosyanın yolunu belirtmeniz gerekir. .).

Böylece, inşa edilebilir yürütülebilir dosyayı çalıştırmak için foo:

./foo

Marka çağrılırken belirtilen hedeflere yayılmış yerleşik kuralların farkında değildim. Bugün yeni bir şey öğrendim =)
Branan

"-bash: make: komutu bulunamadı" <- Geliştirici aracının ve ekstra bileşenlerin indirilmesi gerekiyor.
dgig

17
Değil make main.cpp, ama make main.
Craig McMahon

@CraigMcMahon Girişiniz için teşekkürler!
Hlawuleka MAS

Yeni bir şey öğrendim, bu harika!
FossilizedCarlos

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

31
bir çaylak olarak ben yürütürken "./" dahil değil için çok keder vardı
funk-shun

2
@ funk-shun Keşke yorum bu tür şeyler googling en iyi sonuç olsaydı - beni (benim mac için) anlamaya sonsuza dek götürdü - Teşekkürler!
Cory W.

10
"Gcc main.cpp -o main.out" kullandım ve bu hatayı aldım, x86_64 mimarisi için tanımlanmamış semboller: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... nedeni ortaya çıkıyor, gcc default-links libc. g ++ kullanırken libstdc ++ ile bağlantı kurar. Bu yüzden "g ++ main.cpp -o main.out" komutunu kullanın.
Rachel

1
@Rachel Ben de aynı sorunu yaşadım.
Goldname

1
Hakkında Undefined symbols for architecture x86_64 : sorundan ben şöyle komutunu değiştirmek gcc -lstdc++ main.cpp -o main.outve benim Mac üzerinde olduğu eserler. bağlantı yoluyla: stackoverflow.com/questions/11852568/…
rotoava

69

Bu, tüm Unix makinelerinde çalışan komuttur ... Linux / Ubuntu üzerinde kullanıyorum, ancak OS X'te de çalışıyor. Terminal.app dosyasına aşağıdaki komutu yazın .

$ g++ -o lab21 iterative.cpp

-o O harfi sıfır değil

lab21 yürütülebilir dosyanız olacak

iterative.cpp c ++ dosyanız mı

Bu komutu çalıştırdıktan sonra, programınızı çalıştırmak için terminalde aşağıdakileri yazın:

$ ./lab21

1
Bu benim için işe yaradı. Yukarıdaki diğer çözümleri şanssız denedim. Teşekkürler!
nmrichards 16:18

benim için de çalıştı, hiçbir şey yüklemeye gerek yok, mükemmel bir çözüm.
Chander Shakher Ghorela - Guru

33

Benim için iki adım:

ilk:

make foo

sonra:

./foo

1
./foodunno nasıl kabul edilir cevabının bu önemli emir yok
Suhaib

@Suhaib Kabul ettiğim cevapta bu komut yoktu, çünkü asıl soru bunu sormadı. "C / C ++ nasıl bir Unix konsol / Mac terminalinde çalıştırılır" başlıklı - "c / c ++ derleyicisi nasıl çalıştırılır" olarak yorumladığım. Daha sonra başlık "derle ve çalıştır" olarak değiştirildi. Yanıtımı değişen soruyu yansıtacak şekilde güncelledim.
camh

15

Unix (Linux, Mac OS X, AIX, vb.) Ortamındaki tüm uygulama yürütmeleri yürütülebilir arama yoluna bağlıdır.

Bu yolu terminalde şu komutla görüntüleyebilirsiniz:

echo $ PATH

Mac OS X'te (varsayılan olarak) bu, iki nokta üst üste işaretiyle ayrılmış arama yolunu görüntüler:

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

Bu nedenle, listelenen dizinlerdeki yürütülebilir dosyalar yalnızca adlarını yazarak çalıştırılabilir. Örneğin:

cat mytextfile.txt

Bu çalıştırılır /bin/catve terminalde mytextfile.txt dosyasını görüntüler.

Yürütülebilir arama yolunda olmayan başka bir komutu çalıştırmak için yürütülebilir dosyanın yolunu nitelemeniz gerekir. Diyelim ki Mac OS XI'deki ana dizinimde MyProgram adlı bir yürütülebilir dosya vardı, tam olarak şöyle niteleyebilir:

/ Users / Oliver / MyProgram

Yürütmek istediğiniz programın yakınında bir konumdaysanız, adı kısmi bir yolla niteleyebilirsiniz. Örneğin, eğer MyProgramdizin oldu /Users/oliver/MyProjectI ve ben böyle çalıştırılabilir adını nitelemek ve bu yürütmek olabilir benim ev dizininde oldu:

MyProject / MyProgram

Ya da dizinde /Users/oliver/MyProject2olduğumu ve yürütmek istediğimi /Users/oliver/MyProject/MyProgramsöylemek için, bu gibi göreceli bir yolu kullanabilirsiniz, yürütmek için:

../MyProject/MyProgram

Benzer şekilde ben "aynı MyProgramdizin" göreceli yol kullanmanız gerekir aynı dizindeyseniz. İçinde bulunduğunuz dizin nokta karakterinin ardından bir eğik çizgi gelir. Örneğin:

./MyProgram

Şu anda hangi dizinde olduğunuzu belirlemek için pwdkomutu kullanın.

Programları genellikle sabit diskinizde adlarını nitelemek zorunda kalmadan çalıştırmak istediğiniz bir yere koyuyorsanız. Örneğin, ana dizininizde diğer programların düzenli olarak kullanılan kabuk komut dosyaları için bir "bin" dizininiz varsa, yürütülebilir arama yolunuzu değiştirmeniz akıllıca olabilir.

Bu, .bash_profileana dizininizdeki mevcut dosyayı oluşturup düzenleyerek ve satırları ekleyerek kolayca yapılabilir:

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

Burada tilde (~) karakteri / Users / oliver için kısayol olarak kullanılıyor. Ayrıca, hash bang (#!) Satırının dosyanın ilk satırı olması gerektiğini unutmayın (zaten yoksa). Ayrıca bu tekniğin giriş kabuğunuzun bash (Mac OS X ve çoğu Linux dağıtımında varsayılan) olmasını gerektirdiğini unutmayın. Ayrıca, yüklü programlarınızın ~/binsistem yürütülebilir dosyaları yerine kullanılmasını istiyorsanız, export ifadesini aşağıdaki gibi yeniden sıralamanız gerektiğini unutmayın:

export PATH=~/bin:$PATH

'Onebyone.livejournal.com' sitesinden gelen yorumları kendi güvenlik yanıtımla eklerseniz bu yanıt tamamlanmış demektir. Teşekkür ederim.
PA

10

Ryan, bunu bir yorum yerine cevap olarak değiştiriyorum, çünkü çok kısaydım. Tüm bunları "Terminal" de yapın.

G ++ derleyicisini kullanmak için bunu yapmanız gerekir:

  1. * .Cpp dosyasını kaydettiğiniz dizine gidin.

    cd ~/programs/myprograms/
    (~, eviniz için bir kısayoldur, yani / Users / Ryan / programlar / programlarım / gerçekte kullandığınız konumla değiştirin.)

  2. Derleyin

    g++ input.cpp -o output.bin (output.bin herhangi bir uzantıya sahip herhangi bir şey olabilir, bin sadece unix'te yaygındır.)

    Eğer başarılı olursa HİÇBİR ŞEY geri gönderilmeli ve sorun değil . Genellikle hatalardan geri dönüş alırsınız.

    Ancak, yazarsanız ls, aynı dizindeki dosyaların listesini görürsünüz. Örneğin, input.cpp ve output.bin adlı diğer klasörleri görürsünüz.

  3. Dizinin içinden, şimdi dizini ./outbut.bin


Teşekkürler bu çalıştı. Bunları açıklayacak öğreticiler biliyor musunuz? G ++ 'nın tam olarak ne anlama geldiği gibi,' o 'anahtarının ne olduğu ve ortaya çıkabilecek başka bir şey mi?
Ryan

makealışkanlık hakkında yorum eklemek çünkü hiçbir makefile yoktur.

Ryan, "man sayfalarını" (yani Apple'ın gömülü olduğunu tahmin ettiğim kılavuzları) almak için terminalde "man g ++" yazabilirsiniz. Yine de harika bir eğitim görmedim. Bununla birlikte, g ++ 'daki man sayfası CFLAGS ve her türlü gelişmiş derleme seçeneği ile oldukça derinleşebilir.
nerdwaller

Nitpick: "Başarılı olursa HİÇBİR ŞEY [yazdırılmış] olmalı ve bu iyi. Genelde hatalardan [çıkış] alıyorsunuz." Her zaman bir dönüş değeri olacaktır, başarı 0, hata 0 değil.
sepp2k

Dan Birleştirilmiş stackoverflow.com/questions/13714436/... (bunun için bazı temel talimatları pekiştirmek için çalışıyor)
Shog9

9

Bunu yapmanın kompakt bir yolu şunlar olabilir:

make foo && ./$_

Tek satırlık olması güzel, böylece çalıştırılabilir dosyayı tekrar kolayca yeniden çalıştırabilirsiniz.


8

Geçerli dizinin yolda olmadığı varsayılarak sözdizimi kullanılır ./[name of the program].

Örneğin ./a.out


2
Aferin! Nokta ve eğik çizgi oradadır çünkü birçok sistemde, geçerli dizin (Unix terimlerindeki ".") Kabuk tarafından aranan yolun bir parçası değildir. Böylece, eklemek hangi programı çalıştırmak istediğinizi açık hale getirir.
gevşeyin

7

En iyi uyarıları almak için aşağıdakileri ekleyin, pişman olmayacaksınız. Yapabiliyorsanız, WISE'i derleyin (uyarı hatadır)

- Wall -pedantic -Weffc++ -Werror

Gerçekten varsayılan olmalı.
Konrad Rudolph

6

C veya C ++ programlarını derlemek için ortak bir komut vardır:

  1. make filename

  2. ./filename

make, kaynak dosyanızı aynı ada sahip yürütülebilir bir dosyaya oluşturur. Ancak standart yolu kullanmak istiyorsanız, c ++ için C programları & g ++ oluşturmak için gcc derleyicisini kullanabilirsiniz.

C için:

gcc filename.c

./a.out

C ++ için:

g++ filename.cpp

./a.out

2

A kullanın makefile. Çok küçük (= tek dosya) projeler için bile, muhtemelen buna değer, çünkü işleri test etmek için birkaç derleyici ayarına sahip olabilirsiniz. Hata ayıklama ve dağıtım bu şekilde çok daha kolay çalışır.

makeKılavuzu okuyun, ilk bakışta oldukça uzun görünüyor, ancak çoğu bölümden geçebilirsiniz. Sonuçta birkaç saat sürdü ve beni daha üretken yaptı.


Teşekkürler, bu da iyi bir cevap. Gerçekten mümkün olduğunca lapa gibi yapmaya çalışıyorum ve bu da benim için "kolay" yolun sözdizimini unutmak için bir neden.
PA


2

c / cpp dosyanızın bulunduğu dizini girmeniz yeterlidir.

c kodunu derlemek ve çalıştırmak için.

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

c ++ kodunu derlemek ve çalıştırmak için.

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

"$" varsayılan mac terminal sembolüdür


2

Mac terminalinden bir cpp kaynak kodu derlemek ve çalıştırmak için aşağıdakileri yapmak gerekir:

  1. Cpp dosyasının yolu somePath / fileName.cpp ise, önce somePath yoluna sahip dizine gidin
  2. FileName.cpp dosyasını derlemek için c ++ fileName.cpp -o dosyaAdı yazın
  3. Programı çalıştırmak için ./fileName yazın.

0

Terminali kullanarak bir .C dosyası çalıştırmak iki adımlı bir işlemdir. İlk adım, terminalde gcc yazmak ve .C dosyasını terminale bırakmak ve ardından Enter:

username$ gcc /Desktop/test.c 

İkinci adımda aşağıdaki komutu çalıştırın:

username$ ~/a.out

0

Komutun altında çalışan c ++ dosyalarını çalıştırmak için, dosya adının "main.cpp" olduğu varsayılarak

1. c ++ dosyasından nesne dosyası yapmak için derleyin.

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

2.Since MacOS'ta #include <conio.h>desteklemediğinden, Mac'te destekleyen alternatifini kullanmalıyız #include <curses.h>. Şimdi nesne dosyasının yürütülebilir dosyaya dönüştürülmesi gerekiyor. Kullanmak için curses.hkütüphane kullanmak zorundayız -lcurses.

g++ -o main main.o -lcurses

Şimdi çalıştırılabilir dosyayı çalıştırın.

./main
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.