2014-11-06 6 views
1

필자는 Makefile에 매우 익숙하다는 말로 머리말을 붙여야한다. 내가 -ligraph가 포함되어 있는지 확인하려고메이크 파일이 정확하지 않음 Makefile

all: tiling_graph.o 
     g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph 

:

나는 다음과 같은 Makefile을 만들었습니다. 그러나 "make"를 입력하면 다음과 같은 결과가 출력됩니다. "C++ -c -o tiling_graph.o tiling_graph.cpp"

현재 디렉토리에서 만든 Makefile을 사용하지 않는 이유는 무엇입니까? 나는 "make -f Makefile"과 "make --file = Makefile"을 사용해 보았지만 이들 중 아무 것도 작동하지 않습니다.

또한 Makefile을 처음 작성한 직후 올바르게 작동했습니다. make를 입력 한 후 출력은 "g ++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph"였습니다.

나는 ./tiling_graph를 실행했습니다.

그런 다음 tiling_graph.cpp를 편집하고 make를 다시 실행하면 "C++ -c -o tiling_graph.o tiling_graph.cpp"라는 출력이 나오고 그 이후로 계속되었습니다.

정말 도움이됩니다. 감사!

+0

[이 예제] (http://stackoverflow.com/a/20146082/841108)를보고'Makefile'을 향상 시키십시오. –

답변

2

간단한 방법은 메이크업 규칙에 대해 생각하기 :

target: dependency list 
     commands to make the target 

그것은 종속성 목록에있는 파일 목록에서 target라는 파일을 만들기위한 조리법 것입니다. make은 파일 시스템을 볼 수 있기 때문에 종속 목록의 파일이 target이라는 파일보다 최신인지 알 수 있습니다.이 파일은 target을 재생성하기위한 신호입니다. 결국 종속성이 변경되지 않으면 대상이 최신 상태 여야합니다.

make은 파일을 만드는 방법에 대해 많이 알고 있습니다. 특히 내장 된 "패턴"규칙이 많으므로 C++ 소스 파일 (prog.cpp) 또는 C 소스 파일 (prog.c) 또는 객체 파일()에서 객체 파일 다른 많은 것들. 따라서 라이브러리와 같은 다른 요구 사항이있을 때 makefile을 실제로 작성해야합니다 (심지어 환경 변수에 추가 할 수도 있지만 makefile은 더 좋습니다).

이제 실제로는 all이라는 파일을 빌드하지 않으려합니다. tiling_graph이라는 파일을 작성하려고합니다. 그래서 올바른 메이크업 규칙은 다음과 같습니다 이미 tiling_graph.o를 만드는 방법을 알고

tiling_graph: tiling_graph.o 
     g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph 

make 때문에, 실제로 tiling_graph.cpp에서 tiling_graph을하는 방법을 알아낼 수 있습니다.

그럼 all은 어디서 왔습니까? all를 사용하는 일반적인 방법은 다음과 같습니다

all 대상이 program1, program2program3 필요하다는 make을 알려줍니다
all: program1 program2 program3 

. 따라서 세 가지 프로그램을 모두 빌드해야하는 경우 규칙을 사용하면 make 명령 하나만 수행 할 수 있습니다.all를라는 이름의 파일이 없기 때문에, 그건 "가짜"대상과의 (GNU 메이크업으로, 적어도)은 가짜 대상으로 선언해야합니다

all: tiling_graph 
.PHONY: all 

하지만 당신은 정말 필요하지 않는 당신이 만약 단지 하나의 프로그램을 만들고 싶습니다.

make (make target과 반대)을 입력하면 make이 메이크 파일의 첫 번째 대상을 선택합니다. 그래서 당신이 일반적으로 가장 먼저 만들고 싶은 것을 넣으면 타이핑을 줄일 수 있습니다.

관련 문제