나는 C ++에서 주로 취미로 일합니다 (아직 학교에있어서 실제 직업이 없습니다). IDE는 나를 위해 makefile을 생성하므로 직접 만드는 법을 배울 가치가 있는지 궁금합니다. "가치 학습"이란 말은 C ++을 계속 배우기 전에 모든 것을 버리고 어떻게 작성해야합니까? 그것들을 배우는 것이 정말로 필요할까요? 그렇다면, 그것들에 대해 배우거나 (일반적인 구문과 작동 방식에 대한 이해 등) 실제로 작성하는 방법을 배워야합니까?
나는 C ++에서 주로 취미로 일합니다 (아직 학교에있어서 실제 직업이 없습니다). IDE는 나를 위해 makefile을 생성하므로 직접 만드는 법을 배울 가치가 있는지 궁금합니다. "가치 학습"이란 말은 C ++을 계속 배우기 전에 모든 것을 버리고 어떻게 작성해야합니까? 그것들을 배우는 것이 정말로 필요할까요? 그렇다면, 그것들에 대해 배우거나 (일반적인 구문과 작동 방식에 대한 이해 등) 실제로 작성하는 방법을 배워야합니까?
답변:
예, Makefile의 작동 방식을 이해하는 것이 좋습니다. IDE를 사용하는 IDE를 사용하고 있기 때문에 지금 당장은 관련이 없을 수도 있지만 나중에 지식이 유용 할 가능성이 있습니다.
"가치 학습"이란 말은 C ++을 계속 배우기 전에 모든 것을 버리고 어떻게 작성해야합니까?
솔직히, 그것은 "가치 학습"이라는 기괴한 개념입니다 ...
그러나 나는 당신이 그렇게 할 필요가 없다고 생각합니다.
그것들을 배우는 것이 정말로 필요할까요?
앞으로이 지식이 정말로 필요할지 여부를 예측할 수 없습니다. 그것은 당신이 C ++ 프로그래밍을 계속할 것인지의 여부와 어떤 맥락에 달려 있는지에 달려 있습니다.
그렇다면, 그것들에 대해 배우거나 (일반적인 구문과 작동 방식에 대한 이해 등) 실제로 작성하는 방법을 배워야합니까?
둘 다 추천합니다. Makefile을 작성할 수 없다면, 무슨 일이 일어나고 있는지 알 수 있습니다.
너무 많은 지식이 도움이되지 않는다는 다른 견해가 있습니다.
이것에 깊이 들어가면 여러 버전의 Make가 있으며 여러 플랫폼에서 여러 버전의 Make와 작동하는 복잡한 Makefile을 작성하는 것이 어렵다는 것을 알게 될 것입니다. 그러나, 오픈 소스 세계에서,이 같은 사용 도구에 "가장 좋은 방법"입니다 automake
, autoconf
그래서 당신이 할 경우, 버전 / 플랫폼과 관련된 많은 복잡성이 배후에서 처리 된 메이크 파일 등을 생성하는에이 .
마지막으로 질문에 "java"로 태그를 달았습니다. make
기본 코드 라이브러리를 작성하지 않는 한 Java 응용 프로그램을 빌드하는 데 사용해서는 안됩니다 . 사용하기가 훨씬 쉽고 ...보다 나은 작업을 수행하는 Java 전용 빌드 도구가 있습니다 make
.
메이크 파일은 UNIX 시스템 (예 : AIX, Linux, OS X)에서 중요합니다. 그러나, 나는 그들의 절대적인 "당신은 그것을 알아야한다"중요성이 최근 몇 년 동안 줄어들 었다고 생각합니다. 예를 들어 Windows 개발 (Visual Studio 등)에서 실제로 찾지 못하고 OS X의 XCode는 다른 시스템을 사용합니다. 나는 Java에별로 익숙하지 않지만 개미 파일을 사용한다고 생각합니다.
CMake라는 매우 멋진 시스템이 있으며 운영 체제에 맞는 기본 빌드 파일을 생성합니다. 예를 들어 CMake로 프로젝트 사양을 작성하면 Windows에서 Visual Studio 빌드 프로젝트, Mac에서 XCode 프로젝트 및 Linux에서 Makefile을 만들 수 있습니다. 어떤 방식으로 CMake는 autoconf와 automake를 대체합니다.
나는 보통 "큰 프로젝트"를위한 CMake 파일을 만들지 만 빠른 "그냥해라"Makefile을 작성하고 싶다면 Make를 알고있다. Makefile을 사용하는 수많은 소프트웨어 라이브러리가 있기 때문에 문화적 소양에 좋습니다. 필연적으로 특정 컴파일러와 라이브러리 위치를 편집해야합니다. 그러나 메이크에는 프로젝트가 복잡 할 때 추악한 머리를 키우는 몇 가지 제한 사항이 있기 때문에 KDE와 같은 큰 프로젝트가 CMake 등으로 마이그레이션되고 있음을 알 수 있습니다.
makefile이 끔찍한 시스템이라고 생각하기 때문에 편견입니다. 기존 makefile을 수정할 수 있도록 일반 구문을 배워야합니다. 그러나 나는 그것에 대해 모든 것을 배우거나 처음부터 새로 만드는 것이 유용하다고 생각하지 않습니다.
Makefile 작성 방법을 배우는 것은 여러 가지 이유로 좋은 생각입니다.
항상 사용중인 빌드 시스템을 이해하려고 노력해야합니다.
그렇다고 모든 빌드 파일을 직접 만들 수 있어야하는 것은 아닙니다. 중요한 부분은 프로젝트에서 빌드 시스템이하는 일과 작은 터미널을 수동으로 컴파일 할 수있는 일반적인 능력을 이해하는 것입니다 ( "터미널의 명령 입력"과 같이).
나는 단지 (간단한) Makefile을 만드는 것이 무슨 일이 일어나고 있는지 이해하는 가장 쉬운 단계라고 생각하는 경향이 있지만, 물건을 만드는 방법을 이해하는 다른 수단이있을 수 있습니다.
Windows 전용 프로그래밍을 유지하고 다른 사람이 귀하의 코드를 컴파일 할 것으로 기대하지 않는 경우 원하는대로 코드를 자유롭게 컴파일하십시오.
컴파일러가 불가지론 적으로 프로그래밍하고 싶다면 ( "다른 사람들이 어떤 컴파일러 나 IDE를 사용하고 싶은지 결정하도록") IDE가 "처리되도록"하는 것 이외의 다른 빌드 시스템을 배워야한다.
다른 플랫폼에 맞게 프로그래밍하려면 광범위한 빌드 시스템을 사용해야합니다.
그렇다고해서 자동 생성 된 Makefile이 어떻게 작동하는지 알아야하는 것은 아닙니다. 빌드 시스템의 입력 파일이 어떻게 작동하는지 알아야합니다. 이것들은 때때로 비슷한 구문을 갖습니다.
저는 개인적으로 Makefile을 정말 좋아하고 여러 가지 용도로 사용합니다. 코드를 컴파일하는 것만이 아닙니다. LaTeX를 사용하여 생성하는 모든 더 큰 pdf 및 소스 리포지토리에서 종속성을 빌드, 패키징, 업로드, 업데이트, 수동 백업 풀 / 푸시 등 몇 가지 작업을 자동화해야하는 모든 프로젝트에 대해 Makefile을 만듭니다.
그러나 터미널에서 많은 작업을하고 있으며 Linux에서 작업하고 있습니다. vim (강력한 텍스트 편집기) 및 콘솔 도구 이외의 IDE라고 부르는 것을 사용하지 않습니다. 이것은 당신에게 매우 다를 수 있습니다.
"업데이트"/ 패키지 / 업로드 / .. "프로젝트"로 다른 재실행 명령을 실행해야한다고 불평 한 경우, Makefile 작성 방법을 배우는 것이 도움이 될 수 있습니다.
모든 것에 툴 / GUI / IDE를 가지고 있고 사용한다면, 그 지식에서 아무것도 얻지 못할 수도 있습니다.