你这里有几处问题。
fun.h 加头文件卫士,头文件中声明全局变量要用static修饰。
#ifndef FUN_H#define FUN_H
static int g=10
void fun()
#endif
其他文件中引用这个文件的变量,extern int g
mian.c
#include<stdio.h>#include"fun.h"
extern int g
void main()
{
printf("%d\n",g++)
fun()
}
CC= gccCFLAGS= -O2 -g -Wall
LIBS= -lsqlite3
LIB_DIR= -L../sqlite3/lib/
INCLUD_DIR= -I../sqlite3/include
test:test.c
$(CC) $^ $(CFLAGS) -o $@ \
$(LIBS) $(INCLUD_DIR) $(LIB_DIR)
.PHONY:clean
clean:
-rm test
1.解释:编译器是gcc(可选)
2.CFLAGS= -O2 -g -Wall 是gcc的参数 -O2优化,-g 加调试信息, -Wall(警告)---CFLAGS项可选
3.LIBS= -lsqlite3(库名)有就写没有就不要写,一般的库编译器自己去系统找,特殊的库要自己加。如:pthread线程库。
4.LIB_DIR= -L../sqlite3/lib/,指定库的路径
5.INCLUD_DIR= -I../sqlite3/include,指定头文件的路径.(I是大写的i)
6.
test:test.c
$(CC) $^ $(CFLAGS) -o $@ \
$(LIBS) $(INCLUD_DIR) $(LIB_DIR)
展开就是:gcc -O2 -g -Wall -o test -L../sqlite3/lib/ -I../sqlite3/include
针对你的问题:
先进你的A文件夹
all:test.o
cc *.o -I../B/include/(写绝对路径)
%*.o:%*.c
写一个Makefile文件,如下:SOURCE = tree.c tree_fun.c
DEST = main
GCC = gcc
FLAGS =
all:
$(GCC) $(SOURCE) $(FLAGS) -o $(DEST)
这样就可以直接make,可以编译这三个文件了,编译成的可执行文件是main
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)