Курси створення комп'ютерних ігор на c

Щоб зрозуміти чому у тебе не виходить, тобі потрібно зрозуміти що таке лінковка. Для цього треба зрозуміти що робить g ++ (так само як і інші плюсові компілятори)

Поведінка за замовчуванням (без спеціальних прапорів / опцій).

Замовчуванням g ++ виконує більше ніж просто компіляція, він ще самостійно викликає лінковщік для результату компіляції (файлу з розширенням * .o або * .obj). Такий файл (* .o) може і не скластися, різні версії компілятора можуть відразу викликати лінковщік.

Чим погано поведінка за умовчанням.

Неможливо створити екзешник складається більш ніж з одного * .cpp файлу. Тобто, якщо в проекті два або більше * .cpp файлів, то необхідно змінити поведінку компілятора за допомогою спеціальних опцій, що забороняють викликати лінковщік автоматично.

Як створювати файлів з багатьох * .cpp файлів

1. Скомпілювати кожен * .cpp файл окремо з опцією позначає, що на виході повинен вийти * .o файл.

2. Слінковать * .o файли разом в один екзешник.

У твоєму випадку необхідно виконати щось на зразок цього:

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

g ++ -c -o renderSystem.o renderSystem.cpp

g ++ -o game.exe main.o renderSystem.o

Я не користувався g ++ на винде, так що не можу гарантувати, що цей приклад буде працювати. Але загальний принцип сподіваюся зрозумілий.

Так що ж таке лінковка?

Так то для багатофайлових проектів прийнято використовувати спеціальні скрипти для побудови, так звані мейкфайли (makefile). В такому файлі описується в якому порядку і з якими опціями необхідно компілювати файли, а так само як їх лінковані.

Якщо мені не зраджує пам'ять, віжуал студія створює такий файл автоматично, він на жаль не сумісний з g ++.

Більш того, в світі безліч різних варіацій і стандартів мейкфайла, практично кожен перший розробник IDE "винаходить" свій варіант мейкфайла несумісний з іншими.

Додатки, які виконують ці мейкфайли називаються білдовой системою. У Лінукс самим поширеними є мабуть make і cmake. Крім них ще дуже багато білдових систем: scons, autotools, gradle, waf. тисячі їх.

Білдовая система прочитує мейкфайли в проекті і викликає інструменти (g ++, лінковщік, або які спеціальні програми конкретно для цього проекту) у відповідності з інструкціями з скрипта.

Схожі статті