make: gcc:命令未找到 make: *** [b.out] 错误 127

最近发现自己写的makefile不好使了,很简单的makefile居然报出gcc命令未找到的问题, 网上也查了很多资料, 也请教了一些同事, 未果。偶然开窍发现自己的错误, 记录下来

文件结构如下图:

root@ubuntu:/shiyan/shiyan268# ls
b.out  func.c  func.o  include  main.c  main.o  makefile
root@ubuntu:/shiyan/shiyan268# cd include
root@ubuntu:/shiyan/shiyan268/include# ls
head.h
root@ubuntu:/shiyan/shiyan268/include# cat head.h 
#include <stdio.h>
void func(void);
root@ubuntu:/shiyan/shiyan268/include# cat ../main.c
#include "head.h"
int main(void)
{
	printf("in main!\n");
	func();
	return 0;
}
root@ubuntu:/shiyan/shiyan268/include# cat ../func.c
#include "head.h"
void func(void)
{
	printf("This is func...\n");
	return;
}
root@ubuntu:/shiyan/shiyan268/include# 

自己写的makefile如下:

  1 PATH=/shiyan/shiyan268/include
  2 CC1=gcc
  3 b.out:main.o func.o
  4     $(CC1) -o $@ main.o func.o
  5 main.o:main.c
  6     $(CC1) -c $< -I$(PATH)
  7 func.o:func.c
  8     $(CC1) -c $< -I$(PATH)
  9 .PHONY:clean
 10 clean:
 11     rm *.o b.out
 12 

make后报错:

root@ubuntu:/shiyan/shiyan268# make
gcc -c main.c -I/shiyan/shiyan268/include
make: gcc:命令未找到
make: *** [main.o] 错误 127
root@ubuntu:/shiyan/shiyan268# 

make clean报错:

root@ubuntu:/shiyan/shiyan268# make clean
rm *.o b.out
/bin/sh: rm: 未找到命令
make: *** [clean] 错误 127
root@ubuntu:/shiyan/shiyan268# 

可是我手动输入gcc编译都能过啊

root@ubuntu:/shiyan/shiyan268# gcc -o b.out main.c func.c -I./include
root@ubuntu:/shiyan/shiyan268# ./b.out
in main!
This is func...
root@ubuntu:/shiyan/shiyan268# 
root@ubuntu:/shiyan/shiyan268# which gcc
/usr/bin/gcc
root@ubuntu:/shiyan/shiyan268# 

最后找到错误原因在makefile第一行那个PATH, 这个PATH被makefile认为是环境变量那个PATH, 在makefile中相当于把环境变量改了, 而gcc的时候又要去PATH里面找, 就会报gcc命令未找到这种莫名其妙的错误, 将PATH改成MYPATH即可

  1 ##PATH=/shiyan/shiyan268/include
  2 MYPATH=/shiyan/shiyan268/include
  3 CC1=gcc
  4 b.out:main.o func.o
  5     $(CC1) -o $@ main.o func.o
  6 main.o:main.c
  7     $(CC1) -c $< -I$(MYPATH)
  8 func.o:func.c
  9     $(CC1) -c $< -I$(MYPATH)
 10 .PHONY:clean
 11 clean:
 12     rm *.o b.out
 13 
root@ubuntu:/shiyan/shiyan268# make
gcc -c main.c -I/shiyan/shiyan268/include
gcc -c func.c -I/shiyan/shiyan268/include
gcc -o b.out main.o func.o
root@ubuntu:/shiyan/shiyan268# ./b.out
in main!
This is func...
root@ubuntu:/shiyan/shiyan268# 
尴尬 尴尬 尴尬

猜你喜欢

转载自blog.csdn.net/liaojunwu/article/details/80698831