Vim에서 C 프로그램을 컴파일하지만 현재 디렉터리에는 컴파일하지 않는 방법은 무엇입니까?

Vim에서 C 프로그램을 컴파일하지만 현재 디렉터리에는 컴파일하지 않는 방법은 무엇입니까?

그래서 제가 한동안 Vim에서 사용해 온 명령은 다음과 같습니다:

map <F10> :w<CR> :!clear; make %<<CR> :!./%<<CR>

파일의 현재 이름을 가져와서 컴파일한 다음 실행합니다. 그러나 이는 내 디렉토리를 오염시키고 이를 github에 업로드하려면 업로드하기 전에 확장자가 없는 모든 파일을 삭제해야 합니다.

내가 하고 싶은 것은 그것들을 모두 다음과 같이 컴파일하는 것이다.쓰레기통디렉토리이므로 명령을 다음과 같이 수정해 보았습니다.

map <F10> :w<CR> :!clear; make -C bin %<<CR> :!./bin/%<<CR>

명령이 디렉토리를 변경하는 것을 볼 수 있지만 -C오류가 발생하여 작동하지 않습니다.

*** no rule to make target '17'. Stop. 

이 명령이 작동하게 하려면 어떻게 해야 합니까?

map <F10> :w<CR> :!clear; make -C bin %<<CR> :!./bin/%<<CR>

답변1

:makeVim의 명령 과 운영 체제 실행 파일을 혼동하고 계십니다 make(1). Vim의 명령줄에 입력 하면 makeVim의 명령이 실행됩니다 :make. 이것의 효과 중 하나는 Vim의 options 에 정의된 운영 체제 명령을 실행하는 것입니다 makeprg.

이제 makeprg기본값이 있으므로 make운영 체제 명령 make(1)도 실행됩니다. 하지만 Vim의 명령은 :make옵션을 허용하지 않으므로 -C binVim의 명령줄을 전달한다고 해서 Vim이 실행 중이라는 의미는 아닙니다 make -C bin. 실행되는 운영 체제 명령을 변경하려면 다음을 수행해야 합니다.

let &makeprg = 'make -C /path/to/bin'

그런 다음 Vim에서 이를 실행하면 :makeOS 명령이 실행됩니다 make -C /path/to/bin.

그러나 주석에서 지적했듯이 이 문제를 처리하는 더 좋은 방법은 처음부터 문제를 피하고 관련 없는 모든 파일을 .gitignore. Git 저장소.

관련 정보