• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

맥에서 Makfefile 사용하지 않고, vscode를 사용하여 헤더파일 포함해 실행시키는 법

23.11.14 19:44 작성 조회수 741

2

 답변들이 외부 링크만 알려주고 불친절하다고 생각해 직접 찾아보고 적어봅니다. 시작한지 1주차라 많이 틀릴수도있습니당일단 이건 제 폴더 화면이구요 ch1.cpp가 메인함수이고, 리소스에 add함수(헤더파일 및 바디)를 넣었습니다.   이제 각각에 main.cpp(저는 ch1.cpp라고함) , add.cpp , add.h입니다. 여기서 명령어를 보통 g++ -std=c++14 -Wall ch1.cpp -o test.out 이렇게 치실텐데 이러면 오류나면서 실행이 되지않죠 왜 안될까요? 링커라는게 각각의 cpp파일들을 컴파일한 후에 obj파일로 만들고 이것들을 실행이 가능한 하나의 exe파일 만드는 과정중에 하나인데 우리는 지금 main함수 cpp파일 하나만 컴파일 해놓은 겁니다. 즉 컴파일러가 exe파일로 만들려는데 main.cpp이 main.o로 만들어진거는 확인이 되었는데 add.cpp파일이 컴파일 안되어있으니까 이 링커과정에 문제가 생기는거죠. 해결방법은 간단합니다 add.cpp파일도 컴파일 해주면 대여g++ -std=c++14 -Wall ch1.cpp add.cpp -o test.out -> 해석하면 g++컴파일러 사용해서 ch1.cpp 파일 컴파일하고 add.cpp파일도 컴파일해서 test.out이라는 실행파일 만들어줘 입니다. 이러면 이제 정상적으로 실행이됩니다. cpp배운지 일주일차라 틀린 부분이 있을수도 있어요. 그래도 실행되죠?

답변 2

·

답변을 작성해보세요.

2

안녕하세요? 불친절에 대한 분노가 느껴지는 글입니다만 결과적으로 스스로 해결을 하셨네요. 저도 한 성격 하기 때문에 이 자리를 빌어서 학생때 이런적이 많았다는 고백을 하고 싶습니다. 되돌아보면 분노가 결과적으로 공부에 긍정적인 에너지로 활용되는 경우도 많았습니다.

일주일 차에 이정도를 스스로 추론해내신 것은 아주 잘하신 것 같습니다만, 매번 여러 개의 파일 이름들을 타이핑 하는 것은 번거로우실 것 같아서 VSCode 팁 알려드리려고 합니다.

 

VSCode 자체에서 빌드에 사용하는 설정들을 바꿀 수 있도록 *.json 파일들을 만들어 주는데,

 

c_cpp_properties.json 파일에서

 

"configurations": [

{

"name": "Linux",

"includePath": [

"${workspaceFolder}/**" <- 여러 헤더 파일들(*.h)을 모두 포함(include)시키겠다.

],

 

tasks.json 파일에서

 

{

"tasks": [

{

"type": "cppbuild",

"label": "C/C++: g++ build active file",

"command": "/usr/bin/g++",

"args": [

"-fdiagnostics-color=always",

"-g",

"${fileDirname}/*.cpp", <- 여러개의 cpp 파일들을 모두 빌드하겠다

 

는 의미입니다. 이 설정파일들을 사용하는 방법은 아쉽게도 외부링크에 있습니다.

https://www.youtube.com/watch?v=UqCZda8DLGc

여기 앞부분 설치 방법 참고해보세요.

 

박성국님 요약도 참고하세요.

박성국님의 요약

https://blog.naver.com/sungkukshawnpark/223167856926 (윈도우)

https://blog.naver.com/sungkukshawnpark/223168149338 (맥OS)

 

다른 수강생들로부터 도움을 받고 싶으시면 디스코드로 오세요. 디스코드에 질문 올리셔도 됩니다. https://discord.gg/QkVU8QWUzS

 

  • 제가 맥을 써보기 전에 만든 강의라서 강의 안내 페이지에서 VS 이외의 환경에서는 어느정도 스스로 해결하셔야 한다고 미리 안내를 드리고 있습니다. 나중에 앱 회사 다니느라 강제로 맥을 쓰게 됐는데 C++ 문법은 동일하기 때문에 맥 사용자도 이 강의로 공부하시는 것은 좋다고 판단합니다. 강의를 통째로 재녹화하는 것은 매우 어려운 일이고 새 강의 요구가 빗발치는 상황이라서 부득이 보충하는 내용들을 간간히 외부 링크로 제공해드리거나 또는 잘 정리된 링크로 안내해드리고 있습니다. 양해를 부탁드립니다.

유동근님의 프로필

유동근

질문자

2023.11.17

죄송합니다 교수님. 프로그래밍을 시작한지가 얼마되지 않아, 답답한 마음에 예의가 없는 질문을 드렸습니다. 상당히 죄송하고 현재는 반성하고 있습니다.

그럼에도 불구하고 너그럽게 이해해주시고 친절한 답변까지 해주셔서 상당히 감사합니다. 답변해신대로 해보니 너무 편리하게 잘 됩니다. 더욱 감사합니다 ㅎㅎㅎ

유동근님의 프로필

유동근

질문자

2023.11.18

sudo g++ -std=c++14 -Wall $(find . -name "*.cpp") -o test.out

저와 같은 고민하신 수강생분들이 계실 것 같아 적어둡니다. 올린 코드로 빌드하시면 선택한 디렉토리 내에 모든 *.cpp파일을 찾아 컴파일하고 실행가능한 파일로 바꾸어 줍니다.

$(find . -name "*.cpp") 이 부분이 디렉토리내에 이름이 *.cpp인 파일을 전부찾아 리스트화 시킨다 입니다 ^.^

ehco $(find . -name "*.cpp")를 해보시면 디렉토리내의 모든 *.cpp파일이 나오는 것을 볼 수 있습니당

0

Soobak님의 프로필

Soobak

2023.11.15

안녕하세요, 답변 도우미 Soobak 입니다.

 

첨부해주신 이미지와 설명해주신 글을 꼼꼼히 확인해 보았습니다.
모두 잘 이해하고 계십니다.

 

프로그램이 여러 소스 파일로 구성되어 있을 때,
main() 함수가 있는 ch1.cpp 파일만 컴파일 명령에 포함하고, 다른 필요 소스파일들(add.cpp)을 포함하지 않으시면, 말씀하신 대로 문제가 발생하게 됩니다.

 

첨부해주신 이미지의 파일 구조들을 살펴보면, add() 함수는 ch1.cpp 파일 내에서 사용되고 있지만, 해당 함수의 정의는 add.cpp 파일 내에 존재합니다.

따라서, g++ -std=c++14 -Wall ch1.cpp -o test.out 명령어를 사용해서 컴파일을 시도하신다면,
add.cpp 파일이 컴파일되지 않아 링커(linker)가 add() 함수의 정의를 찾을 수 없기 때문에 오류가 발생합니다.

 

해결 방법을 말씀해주신 것 처럼, add.cpp 파일 또한 컴파일 명령에 포함시키는 것입니다.

즉, 올바른 컴파일 명령은 g++ -std=c++14 -Wall ch1.cpp add.cpp -o test.out 입니다.

이 명령은 말씀해주신 것 처럼 g++ 컴파일러에게 ch1.cpp 파일과 add.cpp 파일 모두를 컴파일하도록 지시하며, 이를 통해 test.out 이라는 실행 파일을 만들어줍니다.

 

스스로 답을 잘 찾아내신 부분이 인상 깊습니다.
답변이 불친절하고 느끼셨다는 부분에 대해서 사과드립니다.