Сборка проекта на gcc


== Исходные данные ==

Представим, что наш проект состоит из 3 файлов - main.c, f1.c, f2.c

// f1.c
int f1() { return 1; }

// f2.c
int f2() { return 2; }

// main.c
#include <iostream>

extern int f1();
extern int f2();

using namespace std;

int main() {
  cout << f1() << endl;
  cout << f2() << endl;
  return 0;
}

Сборка проекта происходит в две стадии - компиляция и собственно сборка.
Компилируются все части отдельно:

$ g++ -c main.c f1.c f2.c
$ g++ main.o f1.o f2.o -o app

На выходе получаем готовое приложение app. Кстати, для тестовых целей мы могли бы
поместить в приложении побольше отладочной информации. Это делается ключом -g.
Отладочную информацию, в дальнейшем, можно из приложения полностью вычистить.

$ g++ -g3 -c main.c f1.c f2.c
$ g++ main.o f1.o f2.o -o app
$ strip -s app

== Сборка статической библиотеки ==

Статическая библиотека собирается в два шага - сначала собираются
объектные файлы, а затем создаются индексы.

$ ar rc libfs.a f1.o f2.o
$ ranlib libfs.a

$ g++ -c main.c
$ g++ main.o -L. -lfs -o app