Использование G ++ для компиляции нескольких файлов .cpp и .h - PullRequest
136 голосов
/ 08 июля 2010

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

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

Ответы [ 10 ]

182 голосов
/ 08 июля 2010

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

т.е.

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

и т. Д.

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

43 голосов
/ 27 марта 2014

Для компиляции отдельно без ссылок необходимо добавить -c параметр:

g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out
20 голосов
/ 08 июля 2010

Теперь, когда я разделил классы на файлы .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 также правильно перестраивал то, что нужно перестраивать из-за изменений файла заголовка.

10 голосов
/ 08 июля 2010

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

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

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

6 голосов
/ 09 февраля 2015

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

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

вот и все !!

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

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

4 голосов
/ 19 ноября 2013

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

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

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

4 голосов
/ 08 июля 2010

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

1 голос
/ 26 мая 2019

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

g++ *.cpp -o output

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

./output

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

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

1 голос
/ 18 января 2014

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

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

0 голосов
/ 17 мая 2016

~ / In_ProjectDirectory.

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

Когда я сохранял каждый файл в одном и том же каталоге, один файл не был правильно сохранен в этом каталоге;файлordin.h.Таким образом, перепроверил, и он был сохранен там, как скоординированный.h, а не неправильно, как -> координировать.h.gch.МелочиArg !!

...