그래서 자바 코드를 컴파일하고 있는데, 종종 파일 이름에 달러 기호가있는 .class 파일을 생성합니다. GNU make는 이것을 싫어하며 파일 이름을 계속 간섭합니다.GNU make가 달러 기호를 포함하는 파일 이름을 어떻게 방해하지 않습니까?
간단한 (인위적인) 예제로서, MyFolder 디렉토리 (및 하위 폴더)의 모든 .class 파일에 대해 hexdump를 수행하는 GNU Makefile 작업을 만들고 싶다고 가정 해 보겠습니다.
지금 MyFolder에 다음과 같은 파일이 있다고 가정 :
MyFolder/makefile MyFolder/sample.java MyFolder/subdir/abc$1.class MyFolder/subdir/test.java MyFolder/xyz.class
목표는 16 진 덤프를 실행하는 조리법을 작성하는 것입니다, MyFolder에 (및 하위 폴더)의 모든 class 파일을 건네. 파일 GNU 실행해야 할 최종 명령의 위의 목록에 대한 그래서, 다음과 같습니다
hexdump subdir/abc$1.class xyz.class
이 로그를 떨어지는 등 너무 쉽게해야하지만, GNU 만들이를 만들기 위해 극단적 인 고통에 간 것 같습니다 가능한 한 어렵다. 다음 메이크와 순진 시도는 작동하지 않습니다
default: hexdump $(shell find -name '*.class')
이 Makefile을 실행하면 다음과 같은 오류 얻을 : 어떻게 위의 출력의 첫 번째 줄에서 명령
hexdump ./subdir/abc$1.class ./xyz.class hexdump: ./subdir/abc.class: No such file or directory make: *** [makefile:3: default] Error 1
공지 사항 올바른지 (파일 이름에 달러 기호 문자가 있음). 그런 다음 실제 명령이 실행되면 "$ 1"이 평가됩니다.
실제로 달러 기호를 이중 달러 기호로 올바르게 이스케이프하면 다음 Makefile도 실패합니다. 물론 나는하지 하드 코드 파일 이름을하는 조리법을 쓰고 싶어하지만, 파일
default: hexdump subdir/abc$$1.class xyz.class
심지어 위 메이크 파일이 같은 실패 명령 (... 쉘 찾을 수)가 $로 발견해야한다 첫 번째 메이크 파일로 오류.
달러 기호가 포함 된 파일 이름을 GNU make가 방해하지 못하게하려면 어떻게해야합니까? 자바 컴파일러는 항상 이러한 것들을 생성하기 때문에 누군가가 전에 반드시 이걸 실행해야만할까요?
우리의 상황을위한 최선의 해결책은 결국 쉘 안에서 $$를 사용하여 목록을 만드는 것입니다.) 구문을 사용합니다. 설명 해줘서 고마워. – deltamind106