내가 빈 디렉토리에 있다고 가정합니다. 이제 아무것도 포함하지 않고 all: randomFilename
라는 빈 파일을 포함하는 Makefile을 만들면 이 호출 될 때 randomFilename.sh
GNU Make가 수행 cat randomFilename.sh >randomFilename; chmod a+x randomFilename
됩니다 make
.
$ echo 'all: randomFilename' > Makefile
$ make
make: *** No rule to make target 'randomFilename', needed by 'all'. Stop.
$ touch randomFilename.sh
$ make
cat randomFilename.sh >randomFilename
chmod a+x randomFilename
$ make -v | head -n2
GNU Make 4.0
Built for x86_64-pc-linux-gnu
더 나쁜 것은 Make randomFilename
가 이미 존재한다면 라는 파일을 덮어 쓴다는 것입니다.
$ echo "My content" > randomFilename
$ echo "My content, all gone" > randomFilename.sh
$ make -B
cat randomFilename.sh >randomFilename
chmod a+x randomFilename
$ cat randomFilename
My content, all gone
Make가 이렇게하는 이유와 그 행동을 방지하는 방법을 찾고 싶습니다.
이 동작은 Make의 기본 제공 접미사 규칙 (이 경우 소스 코드 제어 시스템의 레거시 버전 [ 1 ])의 결과입니다. 기본 제공 접미사 규칙은 빈 .SUFFIXES
의사 대상 [ 2 ] 을 지정하여 비활성화 할 수 있습니다 .
$ echo '.SUFFIXES:' > Makefile
$ echo 'all: randomFilename' >> Makefile
$ make
make: *** No rule to make target 'randomFilename', needed by 'all'. Stop.
$ touch randomFilename.sh
$ make
make: *** No rule to make target 'randomFilename', needed by 'all'. Stop.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다