哪位高手懂makefile,很简单的有关问题
谁懂makefile,很简单的问题
整个只有5个文件
main.c(主文件)
a.h a.c (a源文件及头文件)
b.h b.c (b源文件及头文件)
b里声明和定义了add(int a, int b)这样一个函数(.h里声明,.c里定义)
请问这个Makefile文件怎么写?
还有一种情况,还是这5个文件
这样,Makefile又怎么写?
------解决方案--------------------
别把自己绕进去了。
gcc -o main *.c即可
------解决方案--------------------
main: main.o a.o b.o
gcc -o main main.o a.o
main.o: main.c a.h
gcc -c main.c
a.o: a.c a.h b.h
gcc -c a.c
b.o: b.c b.h
gcc -c b.c
------解决方案--------------------
就相当于编译每个.c文件后再链接;
.c文件里有include包含了头文件,编译时直接找到头文件并展开,编译,链接,就完了
------解决方案--------------------
注意前面的不是空格是tab键
可以去我日记里面看那边makefile的文章
------解决方案--------------------
------解决方案--------------------
整个只有5个文件
main.c(主文件)
a.h a.c (a源文件及头文件)
b.h b.c (b源文件及头文件)
b里声明和定义了add(int a, int b)这样一个函数(.h里声明,.c里定义)
a.h里#include "b.h"
void test();
a.c里#include "a.h"
void test(){add(1,2);}
main.c里#include "a.h" 调用 test()函数
请问这个Makefile文件怎么写?
还有一种情况,还是这5个文件
a.h里没有#include "b.h"
void test();
a.c里#include "a.h" #include"b.h"
void test(){add(1,2);}
main.c里#include "a.h" 调用 test()函数
这样,Makefile又怎么写?
------解决方案--------------------
别把自己绕进去了。
gcc -o main *.c即可
------解决方案--------------------
main: main.o a.o b.o
gcc -o main main.o a.o
main.o: main.c a.h
gcc -c main.c
a.o: a.c a.h b.h
gcc -c a.c
b.o: b.c b.h
gcc -c b.c
------解决方案--------------------
就相当于编译每个.c文件后再链接;
.c文件里有include包含了头文件,编译时直接找到头文件并展开,编译,链接,就完了
------解决方案--------------------
CC = gcc
CXX = g++
CFLAGS += -Wall -g
SOURCE_FILE = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOUCE_FILES))
%.o : %.c %.h
$(CC) -c $(CFLAGS) $< -o $@
%.o : %.c
$(CC) -c $(CFLAGS) $< -o $@
bin: $(OBJS)
$(CC) $(OBJS) -o $@
clean:
rm *.o -rf
rm bin -rf
注意前面的不是空格是tab键
可以去我日记里面看那边makefile的文章
------解决方案--------------------
// 量身定做
main:main.o a.o b.o
gcc -o main main.o a.o b.o
main.o:main.c
gcc -c main.c
a.o:a.c
gcc -c a.c
b.o:b.c
gcc -c b.c
clean :
rm -f main.o a.o b.o
------解决方案--------------------
// 为了楼主方便理解,我写了下响应的最简单源文件,仅供参考:
// a.c
#include"a.h"
int aa = AA;
// a.h
#define AA 20
// b.c
#include"b.h"
int bb = BB;
// b.h
#define BB 30
// main.c
#include<stdio.h>
#include"a.h"
#include"b.h"
extern int aa;
extern int bb;
int main()
{
int ii = 10;
printf("ii=%d, aa=%d, bb=%d",ii,aa,bb);
return 1;
}
// makefile
main:main.o a.o b.o
gcc -o main main.o a.o b.o
main.o:main.c
gcc -c main.c
a.o:a.c
gcc -c a.c
b.o:b.c
gcc -c b.c
clean :
rm -f main.o a.o b.o