Unixコンソール/ Mac端末でC / C ++をコンパイルして実行する方法は?


143

UnixコンソールまたはMac端末でCまたはC ++をコンパイル/実行するにはどうすればよいですか?

(私はそれを知っている、それを忘れて、再びそれを再学習する。それを書き留める時がきた。)

回答:


188

単純な単一ソースプログラムの場合:

make foo

ここで、ソースファイルはfoo.cまたはfoo.cppなどです。

makefileも必要ありません。Makeには、ソースファイルを同じ名前の拡張子を除いた実行可能ファイルにビルドするのに十分な組み込みルールがあります。

ビルドしたばかりの実行可能ファイルを実行することは、プログラムを実行することと同じです。ただし、シェルは実行可能ファイルを検索$PATHするために何があるかを検索するだけなので、ほとんどの場合、実行可能ファイルへのパスを指定する必要があります。.)。

したがって、ビルドされた実行可能ファイルを実行するにはfoo

./foo

makeを呼び出すときに指定されたターゲットに伝播される組み込みルールに気づきませんでした。今日何か新しいことを学びました=)
ブラナン2008年

「-bash:make:コマンドが見つかりません」<-開発者ツールと追加のコンポーネントをダウンロードする必要があります。
dgig 14

17
そうではありませんmake main.cppmake main
Craig McMahon

@CraigMcMahonご協力ありがとうございます!
Hlawuleka MAS

新しいことを学びました、これは素晴らしいです!
FossilizedCarlos 2019

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

31
noobとして、実行時に「./」が含まれていないことに非常に悲しみました
funk-shun

2
@ funk-shun私があなたのコメントがこの種のものをグーグルするときのトップの結果であることを望みます-それを理解するのに永遠にかかりました(私のMacの場合)-ありがとうございます!
Cory W.

10
「gcc main.cpp -o main.out」を使用してこのエラーが発生しました。アーキテクチャx86_64の未定義のシンボル:「std :: __ 1 :: locale :: use_facet(std :: __ 1 :: locale :: id&)const」 、...理由は、gcc default-linksがlibcであることです。g ++の使用中は、libstdc ++とリンクします。したがって、「g ++ main.cpp -o main.out」を使用する方がよい場合があります。
レイチェル

1
@レイチェル私も同じ問題を経験しました。
ゴールドネーム2016

1
Undefined symbols for architecture x86_64 問題については、コマンドを次のように変更しますgcc -lstdc++ main.cpp -o main.out。:リンクを介してstackoverflow.com/questions/11852568/...
rotoava

69

これは、すべてのUnixマシンで動作するコマンドです...私はLinux / Ubuntuで使用していますが、OS Xでも動作します。Terminal.appに次のコマンドを入力します。

$ g++ -o lab21 iterative.cpp

-o 文字Oはゼロではありません

lab21 実行可能ファイルになります

iterative.cpp あなたのC ++ファイルです

そのコマンドを実行した後、ターミナルで次のように入力してプログラムを実行します。

$ ./lab21

1
これは私のために働いたものです。幸運にも上記のソリューションを試しました。ありがとう!
nmrichards 2018年

私のためにも働いた、何もインストールする必要がない、完璧なソリューション。
Chander Shakher Ghorela-グル、

33

私にとって2つのステップ:

最初:

make foo

次に:

./foo

1
./fooどうして受け入れられた答えには、この重要な命令がありません
Suhaib

@Suhaib元の質問はそれを要求しなかったので、私の受け入れられた回答にはそのような命令はありませんでした。「Unixコンソール/ Mac端末でC / C ++を実行する方法」というタイトルが付けられました-「c / c ++コンパイラを実行する方法」と私は解釈します。その後、タイトルは「コンパイルして実行」に変更されました。変更された質問を反映するように回答を更新しました。
camh

15

Unix(Linux、Mac OS X、AIXなど)環境でのすべてのアプリケーション実行は、実行可能な検索パスに依存します。

次のコマンドを使用して、ターミナルでこのパスを表示できます。

エコー$ PATH

Mac OS X(デフォルト)では、コロンで区切られた次の検索パスが表示されます。

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

したがって、リストされたディレクトリ内の実行可能ファイルは、名前を入力するだけで実行できます。例えば:

猫mytextfile.txt

これが実行/bin/catされ、mytextfile.txtが端末に表示されます。

実行可能ファイルの検索パスにない他のコマンドを実行するには、実行可能ファイルへのパスを修飾する必要があります。たとえば、Mac OS XIのホームディレクトリにMyProgramという実行可能ファイルがあるとすると、次のように完全に修飾できます。

/ Users / oliver / MyProgram

実行したいプログラムに近い場所にいる場合は、部分パスで名前を修飾できます。たとえば、私がMyProgramディレクトリ/Users/oliver/MyProjectIにあり、ホームディレクトリにいた場合、次のように実行可能ファイル名を修飾して実行することができます。

MyProject / MyProgram

または、私がディレクトリ/Users/oliver/MyProject2にいて、実行したい/Users/oliver/MyProject/MyProgram場合、次のような相対パスを使用して実行できます。

../MyProject/MyProgram

同様に、同じディレクトリMyProgramにいる場合は、「現在のディレクトリ」の相対パスを使用する必要があります。現在のディレクトリは、ピリオドとそれに続くスラッシュです。例えば:

./MyProgram

現在使用しているディレクトリを確認するには、pwdコマンドを使用します。

プログラムをハードディスク上の場所に配置して、名前を修飾することなく実行したい場合。たとえば、他のプログラムの定期的に使用されるシェルスクリプト用の「bin」ディレクトリがホームディレクトリにある場合、実行可能な検索パスを変更するのが賢明かもしれません。

これは.bash_profile、ホームディレクトリで既存のファイルを作成または編集し、次の行を追加することで簡単に実行できます。

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

ここでは、チルダ(〜)文字が/ Users / oliverのショートカットとして使用されています。また、ハッシュバン(#!)行は、ファイルの最初の行である必要があります(まだ存在しない場合)。この手法では、ログインシェルがbash(Mac OS XおよびほとんどのLinuxディストリビューションのデフォルト)である必要があることにも注意してください。また、インストールされ~/binたプログラムをシステム実行可能ファイルよりも優先して使用する場合は、次のようにエクスポートステートメントを並べ替える必要があります。

export PATH=~/bin:$PATH

セキュリティに関する自分の回答に「onebyone.livejournal.com」からのコメントを追加すると、この回答は完了です。ありがとうございました。
PA、

10

ライアン、私はこれがコメントではなく回答になるように変更しています。このすべてを「ターミナル」で行います。

G ++コンパイラを使用するには、次のことを行う必要があります。

  1. * .cppファイルを保存したディレクトリに移動します。

    cd ~/programs/myprograms/
    (〜はあなたの家のショートカットです。つまり/ Users / Ryan / programs / myprograms /で、実際に使用した場所に置き換えてください。)

  2. コンパイルする

    g++ input.cpp -o output.bin (output.binは任意の拡張子を持つ任意のものにすることができます。実際、binはunixで一般的です。)

    成功した場合はNOTHINGが返されますが、それで問題ありません。一般的には、失敗した場合に返品を受け取ります。

    ただし、と入力lsすると、同じディレクトリにあるファイルのリストが表示されます。たとえば、他のフォルダーinput.cppとoutput.binが表示されます。

  3. ディレクトリ内から、今それを実行します ./outbut.bin


これでうまくいきました。これらのことを説明するチュートリアルを知っていますか?G ++の正確な意味と同様に、「o」スイッチとは何か、他に考えられることは何ですか
ライアン

makemakefileがないため、動作しないというコメントを追加します。

ライアン、ターミナルで「man g ++」と入力して「manページ」を取得できます(つまり、Appleが組み込んだと思われるマニュアル)。すばらしいチュートリアルはまだ見たことがありません。ただし、g ++のマニュアルページは、CFLAGSやあらゆる種類の高度なコンパイルオプションを使用してかなり深くなる可能性があります。
nerdwaller

Nitpick:「成功した場合、[印刷]はありません。それで問題ありません。通常、失敗すると[出力]が表示されます。」常に戻り値があり、成功した場合は0、失敗した場合は0以外になります。
sepp2k

stackoverflow.com/questions/13714436/…からマージ(これに関するいくつかの基本的な指示を統合しようとしている)
Shog9

9

これを実行するコンパクトな方法は次のとおりです。

make foo && ./$_

実行ファイルを簡単に再実行できるように、ワンライナーを用意しておくと便利です。


8

現在のディレクトリがパスにない場合、構文はになります./[name of the program]

例えば ./a.out


2
よかったね!多くのシステムでは、現在のディレクトリ(UNIXの用語では "。")はシェルが検索するパスの一部ではないため、ドットとスラッシュがそこにあります。したがって、それを追加すると、実行するプログラムが明示的になります。
アンワインド

7

警告を表示するには、次の行を追加してください。後悔はしません。可能であれば、WISEをコンパイルします(警告はエラーです)。

- Wall -pedantic -Weffc++ -Werror

本当にデフォルトでなければなりません。
Konrad Rudolph、

6

CまたはC ++プログラムをコンパイルするには、一般的なコマンドがあります。

  1. make filename

  2. ./filename

makeは、ソースファイルを同じ名前の実行可能ファイルにビルドします。しかし、標準的な方法を使用したい場合は、gccコンパイラを使用してCプログラムとc ++用のg ++​​をビルドできます。

Cの場合:

gcc filename.c

./a.out

C ++の場合:

g++ filename.cpp

./a.out

2

を使用しmakefileます。非常に小さな(= 1ファイル)プロジェクトの場合でも、いくつかのコンパイラ設定セットを使用してテストできるので、努力はおそらく価値があります。このようにすると、デバッグと展開がはるかに簡単になります。

makeマニュアルを読んでください。一見するとかなり長いようですが、ほとんどのセクションはざっと目を通すことができます。全体として、数時間かかり、生産性が大幅に向上しました。


ありがとう、それも良い答えです。私は本当にできる限りマッシュを使用しようとしています、そしてそれは私が「簡単な」方法の構文を忘れる理由でもあります。
PA、


2

c / cppファイルがあるディレクトリに入力するだけです。

Cコードのコンパイルと実行用。

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

c ++コードのコンパイルと実行用。

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

「$」はデフォルトのMac端末記号です


2

Macターミナルからcppソースコードをコンパイルして実行するには、以下を実行する必要があります。

  1. cppファイルのパスがsomePath / fileName.cppの場合、まずパスsomePathのディレクトリに移動します
  2. fileName.cppをコンパイルするには、c ++ fileName.cpp -o fileNameと入力します。
  3. プログラムを実行するには、。/ fileNameと入力します

0

ターミナルを使用した.Cファイルの実行は、2ステップのプロセスです。最初のステップは、ターミナルにgccと入力し、.Cファイルをターミナルにドロップして、次を押しEnterます:

username$ gcc /Desktop/test.c 

2番目のステップでは、次のコマンドを実行します。

username$ ~/a.out

0

コマンドの下で実行するc ++ファイルを実行するには、ファイル名が「main.cpp」であると仮定します

1. c ++ファイルからオブジェクトファイルを作成するためにコンパイルします。

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

2. #include <conio.h>はMacOSではサポートされていないため、Macでサポートされている代替手段を使用する必要があり#include <curses.h>ます。次に、オブジェクトファイルを実行可能ファイルに変換する必要があります。使用するcurses.hには、ライブラリを使用する必要があります-lcurses

g++ -o main main.o -lcurses

3.実行ファイルを実行します。

./main
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.