Używanie G++ do kompilacji wielu.cpp i.pliki h

Właśnie odziedziczyłem trochę kodu C++, który został źle napisany z jednym plikiem cpp, który zawierał główną i kilka innych funkcji. Istnieją również pliki .h, które zawierają klasy i ich definicje funkcji.

Do tej pory program był kompilowany przy użyciu polecenia g++ main.cpp. Teraz, gdy rozdzieliłem klasy na pliki .h i .cpp, Czy muszę używać pliku makefile, czy mogę nadal używać polecenia g++ main.cpp?

Author: Keith Pinson, 2010-07-08

9 answers

Wyświetla wszystkie pozostałe pliki cpp po main.cpp.

Ie

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

I tak dalej.

Lub możesz skompilować je wszystkie indywidualnie. Następnie łączysz wszystkie wynikające".o " Pliki razem.

 159
Author: Goz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 09:22:25

Aby skompilować osobno bez linkowania, musisz dodać opcję-c:

    g++ -c myclass.cpp
    g++ -c main.cpp
    g++ myclass.o main.o
    ./a.out
 33
Author: FredAKA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 14:49:32
Teraz, kiedy rozdzieliłem zajęcia .h i .pliki cpp Czy muszę używać makefile lub nadal mogę używać " g++ main.dowództwo cpp?

Kompilowanie kilku plików naraz jest kiepskim wyborem, jeśli zamierzasz umieścić to w pliku Makefile.

Normalnie w pliku Makefile (dla GNU/Make) powinno wystarczyć napisanie, że:

# "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

W ten sposób make będzie poprawnie rekompilować tylko to, co trzeba rekompilować. Można również dodać kilka poprawek, aby wygenerować zależności plików nagłówkowych - tak, że make będzie również poprawnie odbudować to, co trzeba przebudować ze względu na zmiany w pliku nagłówkowym.

 16
Author: Dummy00001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 11:39:33

Możesz nadal używać g++ bezpośrednio, jeśli chcesz:

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

Gdzie f1.cpp i f2.cpp to pliki z funkcjami w nich. Aby dowiedzieć się więcej o tym, jak używać make do budowania, zobacz doskonałą dokumentację GNU make.

 8
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 09:21:22

Wiem, że to pytanie zostało zadane lata temu, ale nadal chciałem podzielić się tym, jak zwykle kompiluję wiele plików c++.

  1. Załóżmy, że masz 5 plików cpp, wszystko co musisz zrobić, to użyć * zamiast wpisywać nazwy każdego pliku cpp, np. g G++ - c*.cpp-o myprogram.
  2. to wygeneruje "myprogram"
  3. Uruchom program ./ myprogram

To wszystko!!

Powodem, dla którego używam * jest to, że co jeśli masz 30 plików cpp, wpisałbyś wszystkie? lub po prostu użyj * podpisz i oszczędzaj czas:)

P. S używaj tej metody tylko jeśli nie dbasz o makefile.

 4
Author: zobair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-09 16:41:21

Możesz użyć kilku komend g++, a następnie link, ale najprostszym jest użycie tradycyjnego pliku Makefile lub innego systemu budowania: jak Scons (które często są łatwiejsze do skonfigurowania niż pliki Makefile).

 3
Author: gauteh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 09:21:35

.pliki h nie mają nic wspólnego ze kompilacją ... dbasz tylko o pliki cpp... więc wpisz nazwę pliku g++ 1.nazwa pliku cpp2.cpp main.cpp - o myprogram

Oznacza, że kompilujesz każdy plik cpp, a następnie łączysz je ze sobą w myprgram.

Następnie uruchom swój program ./ myprogram

 3
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 20:36:32

Używałem niestandardowego pliku Makefile, który skompilował wszystkie pliki w bieżącym katalogu, ale musiałem go skopiować w każdym katalogu, którego potrzebowałem, za każdym razem.

StworzyĹ 'em wiÄ ™ c wĹ' asne narzÄ ™ dzie - Universal Compiler co znacznie uĹ 'atwiĺ' o proces kompilacji wielu plikĂłw.

 0
Author: Shubham Chaudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-17 18:53:00

~ / In_ProjectDirectory $ g++ cpp_func.cpp.h

~ / In_ProjectDirectory $ ./ a. out

... Zadziałało!!

Używanie Linux Mint z Geany IDE

Gdy zapisałem każdy plik do tego samego katalogu, jeden plik nie został poprawnie zapisany w katalogu; plik H. Ponownie został tam zapisany jako koordin.h, a nie niepoprawnie jak -> h. gch. Małe rzeczy. Arg!!

 -3
Author: Tim Conroy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-17 06:40:55