yacc를 사용하여 생성 된 여러 파서를 포함하는 프로젝트가 있습니다. 각 파서에는 다음과 같은 규칙이 있습니다.
xgram.c xgram.h : xgram.y
yacc xgram.y
mv y.tab.c xgram.c
mv y.tab.h xgram.h
이것을 실행하면 make
각 파서가 순서대로 생성되므로 잘 작동합니다.
그러나 함께 실행하면 각 문법에 대한 명령 이 병렬로 자체 생성되므로 파일 make -j 10
에 대한 충돌이 분명합니다 .y.tab.c
y.tab.h
이것을 어떻게 피할 수 있습니까? 내가 발견하고 시도한 유일한 것은 TMPDIR
각 yacc
명령 줄에서 사용하여 작동하지 않는 다른 디렉토리에 출력 파일을 만드는 것입니다.
다른 아이디어가 있습니까?
mv
레시피 에서 명령 을 잘못 입력 하셨을 것입니다.
가있는 경우 bison
다른 답변을 참조하십시오.
의 버전 yacc
이 POSIX와 호환 -b
되는 경우 옵션을 지원해야합니다. 이 경우 다음을 사용할 수 있습니다.
xgram.c xgram.h : xgram.y
yacc -b xgram -d xgram.y
mv xgram.tab.c xgram.c
mv xgram.tab.h xgram.h
POSIX yacc
를 사용하지 않는 경우 다음 과 같이 해킹 할 수 있습니다.
xgram.c xgram.h : xgram.y
mkdir -p tmp_xgram
(cd tmp_xgram && yacc -d ../xgram.y && mv y.tab.c ../xgram.c && mv y.tab.h ../xgram.h)
rm -rf tmp_xgram
그게 효과가있을 것 같아요 그래도 불만이 있다면 ../xgram.y
먼저 임시 디렉토리 에 실제로 복사해야 할 수도 있습니다 .
GNU make 4.3을 사용 xgram.c xgram.h &: xgram.y
하는 경우보다 정확한 규칙을 얻는 데 사용할 수 있습니다.:
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다