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


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

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

9 116

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, чтобы сделать сборку, см. Отличный пакет документации.

Я знаю, что этот вопрос был задан много лет назад, но все еще хотел поделиться тем, как я обычно компилирую несколько файлов 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.СРР имя_файла2.СРР главная.cpp-o myprogram

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

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

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

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

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

~ / In_ProjectDirectory $ ./а.из

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

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

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