С помощью G++ для компиляции нескольких.cpp и.H-файлы

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

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

9 ответов


список всех других файлов cpp после main.СРР.

ie

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

и так далее.

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


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

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

Теперь, когда я разделил классы .h и .cpp-файлы мне нужно использовать makefile или я все еще могу использовать " G++ main.команда ЧГК"?

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


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

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

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


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

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

вот и все!!

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

p.s используйте этот метод, только если вы не заботитесь о makefile.


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


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

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

запустите программу ./иногда


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

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


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

~ / In_ProjectDirectory $ ./а.из

... Сработало!!

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

когда я сохранил каждый файл в том же каталоге, один файл не был сохранен правильно в каталоге; coordin.H-файл. Итак, перепроверили, и он был сохранен там как coordin.h, а не неправильно как - > coordin.ч. ГЧ. Мелочи. Арг!!