필자가 작성한 프로그램에 대한 요구 사항은 구성 파일을 신뢰할 수 있어야한다는 것입니다. 이를 위해 여러 종류의 해시 알고리즘을 사용하여 컴파일 할 때 파일의 해시를 생성합니다. 이렇게하면 해시가 상수로 된 헤더가 생성됩니다.GNU make - 프로그램이 아닌 코드에 대한 종속성
내 의존 관계는 매우 간단합니다. 내 프로그램은 config_hash.h를 사용합니다. config_hash.h에는 대상을 생성하는 대상이 있습니다. 나는 의존성을 처리에 좋은 곳입니다 GCC에 -M 옵션을 사용하고
config_hash.h:
$(SH) genhash config/config_file.cfg > $(srcdir)/config_hash.h
$(PROGRAM): config_hash.h $(PROGRAM_DEPS)
$(CC) ... ... ...
:
makefile은 다음과 같이 보입니다. 헤더가 변경되면 프로그램이 다시 작성됩니다.
내 문제는 config_hash.h가 다시 생성되도록 구성 파일이 변경되었는지 여부를 알 수 있어야합니다. GNU에 대한 그런 의존성을 어떻게 설명하는지 잘 모르겠습니다.
config_hash.h에 대한 종속성으로 config/config_file.cfg를 나열하고 config_file.cfg에 대해 .PHONY
대상을 성공 적으로 제공하려고 시도했습니다. 분명히, 설정 파일이 어떤 목적 코드의 일부가 아니기 때문에 gcc에 -M 스위치를 사용하여 나를 도와 줄 수는 없습니다.
제안 사항? 불행히도 Makefile을 많이 게시 할 수 없거나 모든 것을 게시했을 것입니다.
"make -d"를 실행 해 보셨습니까? 많은 출력을 얻을 것이다. (출력은 적지 만 충분하다. make --help를 보라.). config_hash.h를 사용하면 config_file.cfg를 의존성으로 나열한다. 내 생각 엔 대상 이름이 올바르게 일치하지 않는다는 것입니다. 대상은 config/config_file.cfg에 따라 $ (srcdir) /config_hash.h가되어야 할 수도 있습니다. 예를 들어 make -d는이를 분명하게 만들어야합니다. (또한 gcc -M이 생성하는 .d 파일을 검사하면 문제가 해결 될 수도 있습니다.) – leander