web-dev-qa-db-ja.com

通常、C / C ++ソースコードはどのようにコンパイルしますか? (大規模なコードベース)

CとC++を学び始めてからかなりの時間が経ちましたが、私はWindowsプラットフォームとVisual Studio環境のみに非常に制限されています。最近、いくつかのオープンソースのC/C++プロジェクトを調べたかったので、いくつかダウンロードしましたが、それらのソフトウェアのコンパイル方法がわからなかったのでイライラしました。それから私はそれらすべてについて学ぶ必要がありましたg++makeのものですが、それでも私はこれらのテーマについて非常に限られた知識しか持っていません。

Visual Studioのような、コードを記述し、再生ボタンを押して問題なくブームを起こすことができる環境に慣れているため、最初はコマンドラインでプログラムをコンパイルするのは困難でした。

だから私の質問は、あなたがC/C++開発者であれば、どのようにコードをコンパイルするのですか?比較的大きなコードベースをどのようにコンパイルしますか?使用するツールは何ですか? IDEを使用していますか、それとも単にテキストエディタを使用していますか?使用しているコンパイラは何ですか?コマンドラインからアプリケーションを構築しますか?通常コンパイルするOSは何ですか?

補足:Linuxに関する知識はゼロです。

5
user77044

少なくともLinuxのフリーソフトウェアでは、通常 make のようなビルダーを使用します。 sconsomake のような他の builder プログラムを使用できます

いくつかの(主に歴史的な)理由により、Makefileautoconf または cmake などのユーティリティによって生成される場合があります。これらのジェネレーターは、構成の問題も処理します(たとえば、依存関係がない場合、ソフトウェアの一部の機能を無効にします)。一部のフレームワークは、独自のMakefileジェネレータも提供しています。 qmake for Qt

PS。最近の GNU make 4には、価値のある多くの新機能(プラグインとguileスクリプト機能)があります(おそらく、IMHOがMakefile- sの生成の必要性を取り除くことができます)。

大規模なC++コードベースを構築するときは、コマンドラインユーティリティ(特にmake)を使用することをお勧めします。また、多くの大規模なC++コードベースは、専用のC++コードジェネレーターを使用している場合があります(例: [〜#〜] gcc [〜#〜] コンパイラーには、内部にダースが多数あります)。いくつかのC++コードを生成することには十分な理由があります(おそらく単純な awk または python スクリプトを使用して)。いくつかのヘッダーや定数など.

多くのGNU -or--少なくともLinux上で-その他の大規模なフリーソフトウェアベースを構築するために、通常、それらの構築の詳細すべてを理解する必要はありません。通常、READMEまたはINSTALLテキストファイルでその方法を説明します。多くの場合、これは autoconf -を使用するソフトウェアの場合(常にではない)、3つのコマンドを実行するのと同じくらい簡単です。

 ./configure
 make
 Sudo make install

make install DESTDIR=/tmp/installdir/を実行してから、/tmp/installdirをコピーすることをお勧めします。 Sudo cp -va /tmp/installdir/ /

cmake を使用するソフトウェアの場合、それらのビルドは多くの場合、次のように単純です。

mkdir build 
cd build
cmake ..
make
Sudo make install

pkg-config も、いくつかのパッケージで役立つコンパイルおよびリンクフラグを提供するので、便利なユーティリティです。

依存関係の地獄 のため、大規模なソフトウェアの構築は困難な場合があります(これは、どのオペレーティングシステムでも、すべての大規模なソフトウェアの問題です)。 Linuxディストリビューション を使用して管理します。

これらのフリーソフトウェアは、多くの場合、WindowsよりもLinuxでビルドする方が簡単だと思います(私は知らないため、使用しません)。ところで、私はLinuxをインストールして学ぶことを強くお勧めします。これは、Linuxが楽しくて フリーソフトウェア (ソースコードを研究、改善、貢献できる)でできているためです。

[〜#〜] gcc [〜#〜] コンパイラ、 GNU glibc 、Linux kernel などの非常に大規模または基本的なフリーソフトウェアは(ほとんどすべてがそれらに依存しているため)ビルドはトリッキーです。それでは、ソースコードから簡単なフリーソフトウェアの構築を始めましょう。いくつかを見つけるには sourceforge または github を参照してください。

一部の言語またはフレームワークには、独自のインストーラー、パッケージマネージャー、またはビルダーがあります。たとえば、 ocaml には opam があります。

ところで、すべての [〜#〜] ide [〜#〜] (Windowsの Visual Studio を含む)は、C++コンパイラを実行するためのグラフィカルインターフェイスを備えた単なるエディタであることに注意してください。コマンドライン。したがって、コマンドを介してコンパイラーを実行する方法を知ることによって、実際に何が起こっているのかを理解する方が良いでしょう。

15
0
jamesqf