g++ makefile 예제

특히 스콘으로 비트를 얻은 한 가지 예 : 스콘이 실행되는 곳과 다른 디렉토리에서 컴파일러를 실행해야하는 경우가 있었습니다. 스콘이 컴파일러를 실행하는 디렉토리를 제어하는 것은 실제로 _really hard_http://scons.org/doc/2.1.0/HTML/scons-user/x3398.html 입니다. 프로젝트. Gcc/Clang은 생성된 커버리지 파일에 해당 소스에 대한 경로를 넣고 커버리지 보고서를 생성할 때 해당 경로를 사용합니다. 우리의 프로젝트는 매우 크고 실제로 다른 구성 요소에 대한 여러 스콘 `variant_dirs`를 사용했다. 그리고 서로 다른 구성 요소가 함께 연결되고 실행될 때 결과 커버리지 데이터에는 서로 다른 디렉터리와 관련된 소스 경로가 있었습니다. 그리고 항상 일관된 디렉토리에서 gcc를 실행하거나 혼란을 풀기 위해 gcov / lcov에게 스콘에게 말할 수있는 방법은 없었습니다. 메이크 파일 예제 간단한 C (또는 C ++) 메이크 파일 예제 더 고급 C 메이크 파일 예제 간단한 자바 메이크 파일 (makedepend 및 고급 확인 구문을 사용 하 여) 최종 단순화로 만들기 를 사용 하 여, 특별 한 매크로를 사용 하 여 $@ 그리고 $^, 왼쪽 및 의 오른쪽을 :, 각각, 전체 컴파일 규칙을 보다 일반하게. 아래 예제에서는 모든 포함 된 파일 매크로 DEPS의 일부로 나열 해야 하 고 모든 개체 파일 매크로 OBJ의 일부로 나열 해야 합니다. 이 튜토리얼은 심지어 메이크를 사용하여 가능한 것의 표면을 긁지 않지만, 빠르고 쉽게 중소 규모의 프로젝트에 대한 자신의 makefiles을 만들 수 있도록 스타터 가이드로 의도된다. 이것은 매우 간단한 C ++ Makefile 템플릿으로 중소 규모의 C ++ 프로젝트를 빠르고 쉽게 실행하고 실행할 수 있습니다.

Makefile은 프로젝트의 소스 코드가 헤더(*.hpp)와 구현 파일(*.cpp)의 두 그룹으로 나뉩니다. 프로젝트의 소스 코드 및 디렉터리 레이아웃은 코드를 포함하는 다른 디렉터리가 상주하는 세 가지 주요 디렉터리(포함, src 및 build)로 구성됩니다. 예제에서 사용되는 레이아웃은 다음과 같습니다: 이 형태의 makefile을 사용하는 것은 대부분의 소규모 프로젝트에 충분합니다. 그러나 포함 파일에 대한 종속성이라는 한 가지 누락된 점이 있습니다. 예를 들어 hellomake.h로 변경하는 경우 .c 파일을 다시 컴파일하지 않습니다. 이 문제를 해결하려면 모든 .c 파일이 특정 .h 파일에 종속되도록 해야 합니다. 우리는 간단한 규칙을 작성하고 makefile에 추가하여이 작업을 수행 할 수 있습니다. 포괄적이고 사용하기 쉬운 C ++ Makefile 예제는 여기에서 찾을 수 있습니다 : http://www.partow.net/programming/makefile/index.html 불행히도 컴파일에 대한이 접근 방식에는 두 가지 단점이 있습니다. 첫째, 컴파일 명령을 잃거나 컴퓨터를 전환하면 처음부터 다시 입력해야하므로 기껏해야 비효율적입니다. 둘째, 하나의 .c 파일만 변경하는 경우 매번 모든 파일을 다시 컴파일하는 것도 시간과 비효율적입니다. 그래서, 그것은 우리가 메이크 파일로 무엇을 할 수 있는지 볼 시간이다.

따라서 .h 파일을 포함 디렉토리, src 디렉터리의 소스 코드 및 lib 디렉터리에 일부 로컬 라이브러리에 넣기 시작하려면 어떻게 해야 할까요? 또한, 우리는 어떻게 든 모든 장소에 걸려 그 성가신 .o 파일을 숨길 수 있습니까? 물론 대답은 `예`입니다. 다음 makefile은 포함 및 lib 디렉터리에 대한 경로를 정의하고 개체 파일을 src 디렉터리 내의 obj 하위 디렉터리에 배치합니다. 또한 수학 라이브러리 -lm과 같이 포함하려는 모든 라이브러리에 대해 정의된 매크로도 있습니다. 이 메이크 파일은 src 디렉터리에 있어야 합니다.


mid_admin