G ++를 사용하여 여러 .cpp 및 .h 파일 컴파일


172

방금 주요 함수와 다른 함수가 포함 된 하나의 cpp 파일로 잘못 작성된 C ++ 코드를 상속했습니다. .h클래스와 함수 정의를 포함하는 파일 도 있습니다.

지금까지 프로그램은 명령을 사용하여 컴파일되었습니다 g++ main.cpp. 클래스를 분리 .h하고 .cpp파일을 만들었으므로 makefile을 사용해야합니까, 아니면 여전히 g++ main.cpp명령을 사용할 수 있습니까?

답변:


224

main.cpp 다음에 다른 모든 cpp 파일을 나열하십시오.

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

등등.

또는 모두 개별적으로 컴파일 할 수 있습니다. 그런 다음 결과 ".o"파일을 모두 연결하십시오.


152
당신은 할 수 있습니다g++ *.cpp -o output
rubenvb

7
어쨌든 이것은 나쁜 습관입니까? 내 makefile에서 이것을 사용하고 싶습니다.
gabriel_vincent

8
@gabriel_vincent, 반드시 나쁜 습관은 아니지만 수백 개의 프로젝트에서 하나의 파일을 편집하면 컴파일러가 모든 파일에 대한 모든 작업을 다시 수행하게됩니다. 별도로 컴파일하면 증분 컴파일이 가능합니다.
Paul Draper

@gabriel_vincent 우선 makefile을 손으로 작성해서는 안됩니다. 대신 CMake와 같은 적절한 빌드 시스템을 사용하십시오.
Baum mit Augen

3
@BaummitAugen 예, 14 분 안에 작성한이 작은 2 파일 프로그램을 컴파일하고 싶다는 점을 제외하고는 cmake 설정 한 시간 대신 makefile 작성에 1 분을 쓰는 것이 좋습니다.
Przemek D

55

연결하지 않고 별도로 컴파일하려면 -c옵션 을 추가해야합니다 .

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

3
연결 단계에서 실행 파일 이름을 제어하려면 다음과 같이하십시오.g++ -o my_executable myclass.o main.o
eric mar

22

클래스를 .h 및 .cpp 파일로 분리 했으므로 makefile을 사용해야합니까, 아니면 "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다시 컴파일 해야하는 것만 올바르게 다시 컴파일합니다. 헤더 파일 종속성을 생성하기 위해 약간의 조정을 추가 할 수 있으므로 헤더 파일 변경으로 인해 재구성해야 할 내용을 올바르게 다시 작성해야합니다.


13

원하는 경우 여전히 g ++을 직접 사용할 수 있습니다.

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

여기서 f1.cpp 및 f2.cpp는 함수가 포함 된 파일입니다. make를 사용하여 빌드를 수행하는 방법에 대한 자세한 내용은 훌륭한 GNU make 문서를 참조하십시오 .


12

나는이 질문이 몇 년 전에 요청되었지만 여전히 여러 c ++ 파일을 어떻게 컴파일하는지 공유하고 싶었습니다.

  1. 5 개의 cpp 파일이 있다고 가정 해 봅시다 g++ -c *.cpp -o myprogram. 각 cpp 파일 이름 Eg를 입력하는 대신 *를 사용하기 만하면됩니다 .
  2. 이것은 생성합니다 "myprogram"
  3. 프로그램을 실행 ./myprogram

그게 다야!!

내가 *를 사용하는 이유는 30 cpp 파일이 있으면 모두 입력하겠습니까? 또는 * 기호를 사용하여 시간을 절약하십시오 :)

ps makefile에 관심이없는 경우에만이 방법을 사용하십시오.


1
이 방법을 사용할 때 재정의 오류가 발생합니까? 동일한 방법으로 다른 방법이 있습니까?
Waseem Ahmad Naeem

11

.h 파일은 컴파일과 아무런 관련이 없습니다 ... 당신은 cpp 파일에만 관심이 있습니다. g++ filename1.cpp filename2.cpp main.cpp -o myprogram

는 각 cpp 파일을 컴파일 한 다음에 서로 연결한다는 의미 myprgram입니다.

그런 다음 프로그램을 실행하십시오. ./myprogram


7

으로 rebenvp는 말했다 내가 사용 :

g++ *.cpp -o output

그런 다음 출력을 위해이 작업을 수행하십시오.

./output

그러나 더 나은 해결책은 make파일 을 사용하는 것 입니다. 파일 에 대한 자세한 내용을 보려면 여기 를 읽으 십시오make .

또한 .h파일에 필요한 파일을 추가했는지 확인하십시오 .cpp.


4

여러 g ++ 명령을 사용한 다음 링크 할 수 있지만 가장 쉬운 방법은 전통적인 Makefile 또는 다른 빌드 시스템을 사용하는 것입니다.



1

나는 현재 디렉토리의 모든 파일을 컴파일 한 사용자 정의 Makefile을 사용했지만 매번 필요한 모든 디렉토리에 파일을 복사해야했습니다.

그래서 많은 파일을 컴파일 할 때 프로세스를 훨씬 쉽게하는 내 자신의 도구 인 Universal Compiler 를 만들었습니다.


-4

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

~ / In_ProjectDirectory $ ./a.out

... 일했다!

Geany IDE와 함께 Linux Mint 사용

각 파일을 동일한 디렉토리에 저장했을 때 하나의 파일이 디렉토리 내에 올바르게 저장되지 않았습니다. coordin.h 파일 따라서 다시 확인하고 거기에 coordin.h로 저장되고-> coordin.h.gch로 잘못 저장되지 않았습니다. 작은 것들. 아아!


3
h 파일을 포함 시켰으므로 오류가 발생했습니다.
eric mar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.