Ubuntu, Debian, Red Hat 등 어떤 배포판을 사용하든 make: *** No targets specified and no makefile found. Stop.이라는 오류 메시지를 마주할 수 있습니다. 이는 GNU Make 전반에 걸친 일반적인 문제이기 때문에 수많은 Unix 계열 환경에서 나타날 수 있으며, 현재 작업 디렉터리에 makefile 또는 Makefile이라는 이름의 파일이 존재하지 않는다는 의미입니다. 다행히도 이 오류는 비교적 간단하게 해결할 수 있습니다.
방법 1: 현재 디렉터리에서 메이크파일 찾기
먼저 현재 디렉터리에서 make 명령어를 다시 한번 실행해 동일한 오류가 발생하는지 확인해 보세요. 새 터미널 창을 열었거나 마지막으로 GNU make를 실행한 이후 cd 명령어로 디렉터리를 이동했다면 이 확인 과정이 특히 중요합니다.
오류가 다시 발생한다면 ls 또는 dir 명령어를 실행해 현재 디렉터리에 어떤 파일과 폴더가 있는지 살펴보세요. 잘못된 위치에 있을 가능성이 높습니다. 루트(/) 디렉터리나 홈(~) 디렉터리에 속한 항목들이 보인다면 cd 명령어로 올바른 위치로 이동한 후 make 명령어를 실행해야 합니다.
예상보다 훨씬 멀리 떨어진 곳에 있는 경우도 있습니다. 예를 들어 /var/crash 디렉터리에서 make를 실행했는데 전혀 동작하지 않는다면, 해당 위치에는 무관한 크래시 리포트 파일만 존재하기 때문에 당연한 결과입니다.

대부분의 경우 홈 디렉터리 내부 어딘가에 있는 프로젝트 폴더에서 make 명령어를 실행하게 됩니다. 예를 들어 최신 버전의 GNU nano를 소스 코드로 빌드하려 한다면 ~/nano-2.9.6 같은 디렉터리로 이동한 후 다시 make를 실행하면 됩니다. make를 실행하기 전에 ls 명령어로 해당 디렉터리 안에 메이크파일이 실제로 존재하는지 다시 확인하는 것도 좋은 습관입니다.
빌드 전에 반드시 configure 과정을 먼저 거쳐야 한다는 점을 기억하세요. configure 명령어는 GNU 컴파일러가 원활하게 작동할 수 있는 환경을 만들어 줍니다. 올바른 프로젝트 디렉터리에 있음에도 메이크파일을 찾을 수 없다면, 그 디렉터리 안에서 ./configure를 먼저 실행한 뒤 make를 실행하세요. 정상적으로 컴파일되었다면 sudo make install 명령어로 설치할 수 있습니다. 단, 빌드 자체는 root 권한으로 수행하지 않는 것이 좋으므로 sudo make 등의 명령어는 설치 단계 외에는 사용하지 않는 것이 바람직합니다.
방법 2: 사용자 지정 메이크파일 지정하기
위 방법으로 문제가 해결되었다면 더 이상 할 일은 없습니다. 하지만 여전히 문제가 남아 있다면 고려해 볼 만한 두 가지 특수한 상황이 있습니다. 두 경우 모두 직접 손으로 구성한 프로젝트를 위해 직접 메이크파일을 작성하는 것과 관련이 있습니다.
-f 옵션을 사용하면 makefile이라는 이름이 아닌 파일도 메이크파일로 지정할 수 있습니다. 예를 들어 makefile.bak라는 백업 메이크파일이 있다면 make -f makefile.bak처럼 실행하면 됩니다. 파일명은 자유롭게 변경할 수 있으며, 사용자 지정 메이크파일이나 오래된 메이크파일의 오류를 무시하고 싶다면 -i 옵션을 함께 사용할 수도 있습니다. 다만 오류가 있다면 메이크파일 자체를 수정하는 편이 좋기 때문에 -i 옵션은 일반적으로 권장되지 않습니다.
또 하나 밀접하게 관련된 상황은 대소문자 구분 문제입니다. Unix에서는 다음과 같은 파일들이 모두 서로 다른 파일로 취급됩니다.
- Makefile
- makefile
- makeFile
- MakeFile
- MakefilE
사용자 지정으로 구성된 프로그램은 대소문자가 다르게 적힌 메이크파일을 인식하지 못할 수 있습니다. 진행 중인 코딩 프로젝트를 위해 직접 작성했다면 파일명을 makefile로 바꾸는 것이 가장 좋지만, GNU make가 파일을 찾을 수 있도록 -i 옵션을 활용하는 방법도 있습니다. 처음부터 모든 설정을 올바르게 작성했다면 ./configure를 실행해 적절한 빌드 환경을 생성함으로써 이런 문제 자체를 예방할 수 있다는 점도 기억하세요.