当前位置: 技术问答>linux和unix
makefile中小C程序
来源: 互联网 发布时间:2016-10-08
本文导语: 1楼 代码: //first.c #include #include"second.c" int main(){ printf("Fighting") ; printWords() ; } //second.c #include void printWords(){ printf("The second file") ; } //Makefile文件 first:first.o second.o gcc first.o second.o -o first first.o:fi...
1楼
代码:
//first.c
#include
#include"second.c"
int main(){
printf("Fighting") ;
printWords() ;
}
//second.c
#include
void printWords(){
printf("The second file") ;
}
//Makefile文件
first:first.o second.o
gcc first.o second.o -o first
first.o:first.c
gcc -c first.c -o first.o
second.o:second.c
gcc -c second.c -o second.o
编译之后出错,但是将second.c中的函数和first.c中的函数调用删掉后就成功
Why??
代码:
//first.c
#include
#include"second.c"
int main(){
printf("Fighting") ;
printWords() ;
}
//second.c
#include
void printWords(){
printf("The second file") ;
}
//Makefile文件
first:first.o second.o
gcc first.o second.o -o first
first.o:first.c
gcc -c first.c -o first.o
second.o:second.c
gcc -c second.c -o second.o
编译之后出错,但是将second.c中的函数和first.c中的函数调用删掉后就成功
Why??
|
一般不推荐使用include "second.c"这样的写法.
include是预编译指令,直接将后面的文件插入到当前文件中.这样first.o中已经包含函数printWords.
second.o里面也有printWords,于是连接生成可执行文件的时候就会出现重定义的错误.
Makefile写成
first:first.o
gcc first.o -o first
first.o:first.c
gcc -c first.c -o first.o
就好了,由于使用了include "second.c", second.c不需要编译,也不需要连接
include是预编译指令,直接将后面的文件插入到当前文件中.这样first.o中已经包含函数printWords.
second.o里面也有printWords,于是连接生成可执行文件的时候就会出现重定义的错误.
Makefile写成
first:first.o
gcc first.o -o first
first.o:first.c
gcc -c first.c -o first.o
就好了,由于使用了include "second.c", second.c不需要编译,也不需要连接
|
可以生成second.o,加-c 命令就可以,
memoleak 说的很对,主要是你的头文件包含了之后已经定义过了(声明加定义),你的second.o文件就多余了,如果你真的要用,就改成下面的形式。只加一个声明就可以了
//first.c
#include
void printWords();
int main(){
printf("Fighting") ;
printWords() ;
}
//second.c
#include
void printWords(){
printf("The second file") ;
}
//Makefile文件
first:first.o second.o
gcc first.o second.o -o first
first.o:first.c
gcc -c first.c -o first.o
second.o:second.c
gcc -c second.c -o second.o
|
second.o:second.c
gcc -c second.c -o second.o
编译肯定出错的,生成不了second.o
gcc -c second.c -o second.o
编译肯定出错的,生成不了second.o
|
同意memoleak 和punchio,second.c就是一个函数,生成不了second.o!