2013-12-10 2 views
0

헤더 파일이 필요한 C++ 프로젝트가 있습니다. 일부 파일 (.srv)에서 파이썬 스크립트로 헤더 파일 중 일부를 빌드합니다. 헤더가 없거나 srv 파일이 변경된 경우 내 Makefile에서 스크립트를 실행하길 원합니다. 내 메이크 파일에이 줄을 추가 :Makefile : 무시 된 패턴 규칙

include/services/%.h : include/srv/%.srv 
     python headersFromSRV.py $< 

내가 오류 메시지가 내 프로젝트를 빌드 할 :

fatal error: 'include/services/robot_device_list.h' file not found 
#include "include/services/robot_device_list.h" 
파일이 아직 존재하지 않는 논리가

하지만, 그것을 만들기위한 규칙을 호출하지 않습니다. 내 규칙에 어떤 문제가 있습니까?

답변

0

그 자체로 규칙은 괜찮지 만, 아마도 당신의 문제는 makefile이 요구 사항이라는 것을 모르고 있다는 것입니다. 다른 대상을 작성중인 C/C++ 컴파일러에서 오류 메시지가 발생했다고 생각합니다. robot_device_list.h를 타겟에 의존적으로 추가해야 할 수도 있으므로 makefile은 먼저 타겟을 빌드해야한다는 것을 알고 있습니다. 예 :

foo.exe: foo.o 
    (your link statement) 

foo.o: foo.c include/services/robot_device_list.h 
    (your compile statement) 
+0

아마도 맞을 것입니다. 다른 대상을 빌드하는 규칙은 내가 소유하지 않고 다른 Makefile에 정의되어 있으며 Makefile에 포함되어 있습니다. 타겟을 컴파일하는 데 필요한 * .cpp 소스 목록 만 정의합니다. 불행하게도이 두 번째 Makefile은이 목록에서 * .cpp 파일 만 받아들이고 다른 파일은 무시합니다. 대상을 빌드하기위한 규칙을 변경하지 않고 my * .cpp에 종속성을 추가하는 방법이 있습니까? – Blink

+0

makefile이 포함되어있는 경우, 예제의 마지막 것과 같이 모든 종류의 규칙을 makefile에 추가 할 수 있습니다. – geert3

+0

헤더 파일에 따라 기본 규칙을 만들었습니다. 내 모든 헤더가 성공적으로 만들어졌습니다! 나는 include 뒤에 규칙을 넣어야했다. 그렇지 않으면 주요 타겟이 빌드되지 않을 것이다. 감사. – Blink