1

最近、私が取り組んでいるsqliteプログラム用に持っていたmakefileでこのコマンドを使用する必要がありました。

gcc -g -c sqlite3.c -o sqlite3.o
g++ -g -c main.cpp -o main.o
g++ sqlite3.o main.o -o sqliteex

sqlite3.hインターフェイス(#include SQL / sqlite3.hでmain.cppファイルに含まれている)を使用するには、sqlite3.cファイルをプログラムに直接コンパイルする必要がありました。しかし、なぜこれを行うためにgccを使用してsqlite3.oを作成し、両方のファイルを.oファイルとして実行可能ファイルにコンパイルする必要があったのでしょうか。

編集:私の推測では、.oファイルはgccとg ++の両方でコンパイル可能ですが、その場合は、常に.oファイルとしてコンパイルすることをお勧めしますか?

4

2 に答える 2

3

しかし、なぜ gcc を使用してこれを実行し、sqlite3.o を作成してから、両方のファイルを .o ファイルとして実行可能ファイルにコンパイルする必要があったのでしょうか?

その必要はありませんでした。これを行った理由は、sqlite.c がCコードであり、C++コードではないことを指定するためでした。代わりにこれを行うこともできました:

g++ main.cpp -x c sqlite3.c -o sqliteex

さらに、次のように、sqlite コードが C++ としてコンパイルされた可能性があります (ただし、まったく確実ではありません)。

g++ main.cpp sqlite3.c -o sqliteex
于 2012-09-13T18:26:33.177 に答える
0

ウィキペディアからの引用:

シングル コンパイル ユニットは、C/C++ 言語用のコンピューター プログラミングの手法です。これにより、コンパイル時間が短縮され、コンパイラー自体がプログラム全体の最適化やプリコンパイル済みヘッダーをサポートしていない場合でも、コンパイラーがプログラムの最適化を実行できるようになります。

http://en.wikipedia.org/wiki/Single_Compilation_Unit

開発は、ほとんどの場合、成功サイクルまで編集 -> コンパイルです。個別にコンパイルされたファイルがある場合、変更されたファイルのみを再コンパイルするだけで、再構築がはるかに高速になります。最後の行はコンパイルではなく、コンパイルされたオブジェクト ファイルをターゲットの実行可能ファイルにリンクしています。

また、Mysticial が指摘したように、C と C++ が混在しています。

于 2012-09-13T18:18:42.570 に答える