Использование g++ для компиляции нескольких файлов .cpp и .h

Я только что унаследовал некоторый код на С++, который был написан плохо с одним файлом cpp, который содержал основную и кучу других функций. Существуют также файлы .h, содержащие классы и определения их функций.

До сих пор программа была скомпилирована с помощью команды g++ main.cpp. Теперь, когда я разделил классы на файлы .h и .cpp, мне нужно использовать make файл или я могу использовать команду g++ main.cpp?

Ответ 1

перечислить все остальные файлы cpp после main.cpp.

ie

g++ main.cpp other.cpp etc.cpp

и т.д.

Или вы можете скомпилировать их все индивидуально. Затем вы связываете все полученные ".o" файлы вместе.

Ответ 2

Чтобы скомпилировать отдельно без ссылок, вам нужно добавить -c:

g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out

Ответ 3

Теперь, когда я разделил классы на файлы .h и .cpp, мне нужно использовать make файл или я могу использовать команду "g++ main.cpp"?

Компиляция нескольких файлов сразу является плохим выбором, если вы собираетесь поместить это в Makefile.

Обычно в Makefile (для GNU/Make) достаточно написать, что:

# "all" is name of the default target, running "make" without params would use it
all: executable1

# for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker
CC=$(CXX)

# tell which files should be used, .cpp -> .o make would do automatically
executable1: file1.o file2.o

Таким образом, make будет правильно перекомпилировать только то, что нужно перекомпилировать. Можно также добавить несколько настроек для генерации зависимостей заголовков файлов, чтобы make также правильно перестроил то, что нужно перестроить из-за изменений файла заголовка.

Ответ 4

Вы можете использовать g++ напрямую, если хотите:

g++ f1.cpp f2.cpp main.cpp

где f1.cpp и f2.cpp - файлы с функциями в них. Подробнее о том, как использовать make для сборки, см. В отличной документации GNU.

Ответ 5

Я знаю, что этот вопрос задавался много лет назад, но все же хотел поделиться тем, как я обычно компилирую несколько файлов c++.

  1. Допустим, у вас есть 5 файлов cpp, все, что вам нужно сделать, это использовать * вместо того, чтобы вводить каждое имя файла cpp Eg g++ -c *.cpp -o myprogram.
  2. Это сгенерирует "myprogram"
  3. запустить программу ./myprogram

все это!!

Причина, по которой я использую *, заключается в том, что если у вас есть 30 cpp файлов, вы бы набрали их все? или просто используйте знак * и сэкономьте время :)

ps Используйте этот метод, только если вам не нужен make файл.

Ответ 6

Вы можете использовать несколько команд g++, а затем ссылку, но проще всего использовать традиционный Makefile или какую-либо другую систему сборки: например, Scons (которые часто легче настраивать, чем Make файлы).

Ответ 7

.h файлы не будут иметь ничего общего с компиляцией... вы заботитесь только о файлах cpp... так что введите g++ filename1.cpp filename2.cpp main.cpp -o myprogram

означает, что вы компилируете каждый файл cpp и затем связываете их вместе в myprgram.

затем запустите вашу программу ./myprogram

Ответ 8

Я использовал пользовательский Makefile, который скомпилировал все файлы в текущем каталоге, но мне пришлось копировать его в каждый каталог, в котором я нуждался, каждый раз.

Итак, я создал свой собственный инструмент - Универсальный компилятор, который значительно упростил процесс при компиляции многих файлов.

Ответ 9

Как сказал rebenvp, я использовал:

g++ *.cpp -o output

А затем сделайте это для вывода:

./output

Но лучшее решение - использовать make file. Читайте здесь, чтобы узнать больше о файлах make.

Также убедитесь, что вы добавили необходимые файлы .h файлы .cpp.

Ответ 10

Как бы вы успешно сделать это на Windows?

Ответ 11

~/In_ProjectDirectory $g++ coordin_main.cpp coordin_func.cpp coordin.h

~/In_ProjectDirectory $./a.out

... Работает!!

Использование Linux Mint с Geany IDE

Когда я сохранил каждый файл в том же каталоге, один файл не был сохранен правильно в каталоге; файл Coordin.h. Итак, перепроверенный и он был сохранен там как Coordin.h, а не неправильно как → coordin.h.gch. Маленький материал. Arg!!