web-dev-qa-db-ja.com

LinuxでのC ++開発-どこから始めればよいですか?

私は自分のWindowsインストールを残しておくことにし、デフォルトのOSとしてDebianを実行しています。私は常にWindowsで、特にVisual Studioでコーディングしてきました。私は現在、Linuxでコードをコンパイルすることに慣れようとしています。

私はまだたくさんのドキュメントを読んでいるので、皆さんが私にとって簡単すぎるとは思わないかもしれませんが、どこから始めればよいかを知るのはいいことです。特定の質問がいくつかありますが、この件に関して他に何か提案/推奨があれば遠慮しません。

  • Makeファイルの作成に関する推奨ガイドは何ですか、このmakefileからコンパイルするにはどうすればよいですか(自分でg ++を呼び出しますか? 'make'を使用しますか?)
  • 他のLinuxソフトウェアを見ると、ほとんどの場合、「構成」ファイルがあるようです。正確には何をしますか?必要なライブラリがインストールされているかどうかをチェックするだけですか、それとも要件をチェックするだけではありませんか?
  • ライブラリをリンクするにはどうすればよいですか?これは、メイクファイルやg ++パラメータとどのように関連していますか? Windowsでは、ライブラリをコンパイルし、いくつかのヘッダーファイルを含め、リンクする追加のlibファイルをリンカーに指示し、dllファイルをコピーします。このプロセスはLinuxでどのように機能しますか?
  • コードエディターへの推奨事項私は現在nanoを使用していますが、vimとemacsについて聞いたことがありますが、それらの利点が互いにどのように違うのかわかりません。他に何かありますか、そしてなぜ私は前の3つのどれよりもそれらを検討するのですか?注:IDEを探していません。

ヘルプ、ガイドやドキュメントへのリンク(できれば初心者向けのもの)は大歓迎です。

33
Daniel Sloof

Makeファイルの作成に関する推奨ガイドは何ですか、このmakefileからコンパイルするにはどうすればよいですか(自分でg ++を呼び出しますか? 'make'を使用しますか?)

「make」を呼び出して、makefileからビルドします。そして、メイクファイル内で、g ++とldを使用してコンパイルおよびリンクします。

他のLinuxソフトウェアを見ると、ほとんどの場合、「構成」ファイルがあるようです。正確には何をしますか?必要なライブラリがインストールされているかどうかをチェックするだけですか、それとも要件をチェックするだけではありませんか?

これは通常、ビルドに使用される環境に基づいてさまざまなものをセットアップするために使用されるスクリプトです。時にはそれは単なる基本的なシェルスクリプトである場合もあれば、Autoconfなどのツールを呼び出してビルド時に利用可能なものを発見する場合もあります。 "configure"スクリプトは通常、ユーザーが実験的な機能のサポートなど、構築または除外するさまざまなオプションのものを指定する場所でもあります。

ライブラリをリンクするにはどうすればよいですか?これは、メイクファイルやg ++パラメータとどのように関連していますか? Windowsでは、ライブラリをコンパイルし、いくつかのヘッダーファイルを含め、リンクする追加のlibファイルをリンカーに指示し、dllファイルをコピーします。このプロセスはLinuxでどのように機能しますか?

ldはGNUリンカーです。これを個別に呼び出すか(ほとんどのメイクファイルが最終的に行うことです)、またはg ++に委任することができます。g++とldに渡すオプションは、含まれているヘッダー、リンクするライブラリ、および結果を出力する方法を探す場所。

コードエディターへの推奨事項私は現在nanoを使用していますが、vimとemacsについて聞いたことがありますが、それらの利点が互いにどのように違うのかわかりません。他に何かありますか、そしてなぜ私は前の3つのどれよりもそれらを検討するのですか?注:IDEを探していません。

VimとEmacsは非常に柔軟なエディターであり、さまざまな使用法をすべてサポートしています。構文の強調表示など、最小限の機能がいくつか必要になる場合がありますが、自分に最も適したものを使用してください。

22
MandyK

MandyKの回答に添えるメモです。

手動でmakeファイルを作成することは、通常、Linuxディストリビューション/ Unixのバリアント全体を構築するための非常に移植性のない方法です。メイクファイルを自動生成するための多くのビルドシステムがあり、メイクファイルなしでビルドします。 GNU AutotoolsCmakeSconsjam など.

また、構成について詳しく説明します。

  • 利用可能なコンパイラ、ライブラリ、システムアーキテクチャをチェックします。
  • システムが適切な互換パッケージリストと一致することを確認します。
  • コマンドライン引数を指定して、ビルド、インストールパス、オプションパッケージなどを特殊化できます。
  • 次に、Configureはシステムに固有の適切なMakefileを生成します。
14

Makeファイルの作成に関する推奨ガイドは何ですか、このmakefileからコンパイルするにはどうすればよいですか(自分でg ++を呼び出しますか? 'make'を使用しますか?)

GNU Makeマニュアル を読んでmakefileの書き方を学びました。

他のLinuxソフトウェアを見ると、ほとんどの場合、「構成」ファイルがあるようです。正確には何をしますか?必要なライブラリがインストールされているかどうかをチェックするだけですか、それとも要件をチェックするだけではありませんか?

設定ファイルは通常 autotools に関連付けられています。スクリプトの名前が示すように、ソフトウェアを構成できます。開発者の観点からは、これは主に、変数を決定するマクロ、使用可能なライブラリーなどを設定することを意味します。ライブラリの可用性もテストします。最後に、スクリプトはGNU Makefileを生成します。これを使用して、実際にソフトウェアをビルドおよびインストールできます。

GNUビルドシステムは多くの1つにすぎません。GNUビルドシステムは他のものより遅い傾向があり、醜いMakefile。より一般的なもののいくつかは CMake 、Jam( Boost Jam はC++にとって興味深いかもしれません)および waf です。単純なプロジェクトの場合、Makefileを手動で作成するのは簡単ですが、「依存関係チェック」(ライブラリなど)も手動で行う必要があります。

編集: Brian Gianforcaro もこれを指摘しました。

7
sebnow

それであなたを始めるために私は最初にあなたにこれを指摘します ガイド メイクファイルのために、それはまたいくつかのリンクするものもカバーします。
これは、大学のコンピュータサイエンスの教授から寄せられたほんの一部であり、非常に明確で簡潔で、非常に役立つことがわかりました。

IDEについては、メイクファイルも処理するため、通常は Eclipse を使用します。言うまでもなく、コンパイルと標準出力はプログラムのすぐ近くにあります。
これは主にJava開発用ですが、C/C++プラグインもあります!

4
gnomed

あなたの質問は少し一般的ですが、ここに私がお勧めするものがあります:

  • エディター:vimとemacsは人気があります。ほとんどのツールと同様に、最も重要なことは、それを習得することです。 vi(その子孫)はどこでも使用できるため、私はvimを使用するのが好きですが、特にLinuxを使用している場合は、あまり関係がないかもしれません。どのプログラミングエディタでも問題ありません。

  • 構成:大規模なプロジェクトを行わない限り、気にしないでください。使用してデバッグするのは悪夢です。プロジェクトを配布するつもりである場合にのみ意味があります。その場合、オートブックを読みます: http://sources.redhat.com/autobook/ 。他の人が言ったように、代替案があります(cmake、sconsなど...)。私はsconsとautotoolsの両方にかなり精通していますが、小さい(ファイルのカップル)プロジェクトにはまだmakeを使用しています。

共有ライブラリについて:共有ライブラリに対して直接リンクすることを除いて、ほとんどWindowsと同じです。Linuxでは.libと.dllの違いはありません。例えば。関数fooを含む1つのライブラリfooの場合:

int foo(void)
{
     return 1;
}

次のように作成します。

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

メイン(もちろん、実際にはAPIをヘッダーファイルに入れます):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

そして、あなたはそれを次のようにリンクします:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

-L。ここでは、リンカーに現在のディレクトリ(Windowsとは異なり、これはLinuxではデフォルトでは決して実行されません)を調べてほしいと言います。

4
  • コードエディターへの推奨事項私は現在nanoを使用していますが、vimとemacsについて聞いたことがありますが、それらの利点が互いにどのように違うのかわかりません。他に何かありますか、そしてなぜ私は前の3つのどれよりもそれらを検討するのですか?注:IDEを探していません。

Linuxでウィンドウマネージャー(KDE、Gnomeなど)を使用している場合は、ウィンドウマネージャーに標準のテキストエディターを使用することもできます。 vim/emacs/nanoに比べて得られる主な利点は、Windows環境からのものに馴染みがあるように見えることです。ウィンドウマネージャーで実行するように作成されたエディターには、メニューバー、ファイルを開く/保存するダイアログ、元に戻す/やり直しがあります。 、およびコンソールエディタがおそらく対応できない他の多くのきちんとした機能。 (最近のemacsとvimはかなり洗練されているので、誰が知っていますか;-P)

KDE(私が使用しているもの)では、KWriteをお勧めします。KWriteは、機能が充実していますが、構文が強調表示されたかなり基本的なテキストエディターです。または、いくつかの追加機能を備えたより洗練されたテキストエディターであるKate:セッション管理、組み込みのターミナルパネル、makeの自動呼び出し、およびC/C++シンボルビューアを含むいくつかのプラグイン。フルIDEプロジェクトを設定することに煩わされたくない場合は、通常Cateの作業にKateを使用します。(FYI IDE KDEの場合はKDevelop )

3
David Z

コードエディターへの推奨事項私は現在nanoを使用していますが、vimとemacsについて聞いたことがありますが、それらの利点が互いにどのように違うのかわかりません。他に何かありますか、そしてなぜ私は前の3つのどれよりもそれらを検討するのですか?注:IDEを探していません。

ViとEmacsは、2つの典型的なUnixエディターです。 IDEではなくテキストエディターを使用する場合は、そのうちの1つまたはそれらの派生物(vim、xemacsなど)が適しています。どちらも構文の強調表示と、デフォルトまたは拡張機能を介したあらゆる種類の機能をサポートしています。これらのエディターの最も優れた点は、エディターが提供する拡張性です。さまざまなLISPを介したemacs、および独自のスクリプト言語を介したvim。

私は個人的にEmacsを使っているので、Vimについてはあまり言えませんが、両方についてたくさんの情報をオンラインで見つけることができるはずです。 Emacsには this one を含むいくつかの優れたチュートリアルとリファレンスがあります。

編集[2014年12月]:最近、クロスプラットフォームで拡張性の高いエディターの傾向があるようです。これは、IDEに劣るものの、vi/emacsよりもグラフィカルで、複数のプラットフォームにわたるネイティブ感が欲しい場合に適しています。 Sublime または Atom を見ることをお勧めします。これらはどちらもWindows/Linux/Macで動作し、プラグインとテーマの素晴らしいコミュニティがあります。

3
thekidder

ESRによる本 The Art of Unix Programming をお勧めします。エディター、プログラミング言語などの選択をカバーします。また、UnixまたはLinuxでのプログラミングの背後にある考え方に良い意味を与えます。

エディターの場合は、おそらくVimまたはEmacsが必要です。それらは両方とも異なり、どちらがより優れているかは、何よりも個人的な好みについてです。私はVimを使用しています。コード内をすばやく移動して変更を加えるのに最適です。 Emacsはあまり好きではありませんでしたが、多くの人が好きです。 Emacsは非常に拡張性が高く、ニュースリーダーからIDEまであらゆるものに使用できます。両方を試して、あなたが好きなものを見てください。

3
Steve Rowe

Visual Studioから来た人にとって、このすべてのコマンドラインは、難解で厄介に見えるかもしれません。 bashシェル/ vim/emacsジャンキーに切り替える前に、いくつかのGUIベースのツールを試して、移行時間を確保してください...

  • QT Creator mini-IDEを備えたQT 4.5。これは、競合他社よりも数年前の最高のフレームワークです。
  • Eclipse(C++)-Windowsでのこれの経験から、それは驚くべきものだと思います(これはおそらくこれまでで最高のJavaアプリケーションです))
  • KDevelop
  • アンジュタ
  • Delphiを使用している場合は、Lazarus/FreePascalが良い代替手段です。

私はロングヘアーがだまされて、vimまたはemacsがそれらに最高かつ最速の開発環境を提供するが、人々によってストロークが異なると主張すると確信しています。 IDEに慣れている人は、切り替えるのに時間がかかるか、まったく切り替えたくない場合があります。編集能力にかかわらず、GUIアプリの作成は80x25ツールの仕事ではありません。何年もかかります。物事のコマンドラインの側面を持つエキスパートになるために、それは何よりも世界観の変化のより多くです。

2
rep_movsd

g ++を直接呼び出してからautotoolsビルドチェーンを使用するまでの間隔はかなり狭いです。 autotoolsは、Linux /オープンソースの世界で利用可能な「プロジェクト」に本当に最も近いものです。

ここでの適切な答えの中での補足として.. Windowsの人として実行されている地面にぶつかりたい場合は、新鮮な新しい Qt SDK をお勧めします。それは家のように感じるでしょう:-)

1
utku_karatas

Makeの代わりにSConsを使用することをお勧めします。同じ作業を行いますが、動的ライブラリや依存関係などを作成する方法をすぐに使用および処理する方が簡単です。ここでは、単純なプログラムの実際の例を示します。

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

テキストエディターとして、コーディングに関してJEditに満足していますが、それは好みの問題です。

0
Monkey