最近发现自己写的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#