在一个demo目录下有三个目录:分别是test, include, lib
test目录下有三个目录,分别是include和source和project,在目录include下有三个文件,分别是a.h,b.h,c.h,在source目录下有三个文件,分别是a.c,b.c,c.c,project目录下放的是makefile文件
include目录下有多个头文件,分别是d.h,m.h, n.h,f.h
lib目录下有多个静态库,分别是:liberr.a,libarm.a
现在a.c包括a.h,b.h,d.h;b.c包括b.h,c.h,m.h,n.h;c.c包括a.h,b.h,c.h
现在要求写一个makefile文件,把.c文件编译成.o文件,并链接静态库,生成的目标文件和可执行文件放哪儿无所谓,跪求代码,在线等,谢谢!
LINUX下makefile文件的编写
答案:2 悬赏:80 手机版
解决时间 2021-02-22 07:34
- 提问者网友:骑士
- 2021-02-21 09:52
最佳答案
- 五星知识达人网友:末日狂欢
- 2021-02-21 11:25
INC_PATH := -I./include/
LIB_PATH := -L./lib/
LIBS := $(LIB_PATH) -lerr -larm
CC := gcc
LD := gcc
CFLAGS := -O2 -Wall $(INC_PATH)
SRC_PATH := ./source
SOURCE := $(SRC_PATH)/a.c\
$(SRC_PATH)/b.c\
$(SRC_PATH)/c.c
TARGET := target
OBJS := a.o b.o c.o
$(TARGET): $(OBJS)
$(LD) -O2 -o $(TARGET) $(OBJS) $(LIBS)
a.o : $(SRC_PATH)/a.c
$(CC) $(CFLAGS) -c -o $@ $<
b.o : $(SRC_PATH)/b.c
$(CC) $(CFLAGS) -c -o $@ $<
c.o : $(SRC_PATH)/c.c
$(CC) $(CFLAGS) -c -o $@ $<
.PHONY: clean
clean:
-rm -f $(OBJS)
LIB_PATH := -L./lib/
LIBS := $(LIB_PATH) -lerr -larm
CC := gcc
LD := gcc
CFLAGS := -O2 -Wall $(INC_PATH)
SRC_PATH := ./source
SOURCE := $(SRC_PATH)/a.c\
$(SRC_PATH)/b.c\
$(SRC_PATH)/c.c
TARGET := target
OBJS := a.o b.o c.o
$(TARGET): $(OBJS)
$(LD) -O2 -o $(TARGET) $(OBJS) $(LIBS)
a.o : $(SRC_PATH)/a.c
$(CC) $(CFLAGS) -c -o $@ $<
b.o : $(SRC_PATH)/b.c
$(CC) $(CFLAGS) -c -o $@ $<
c.o : $(SRC_PATH)/c.c
$(CC) $(CFLAGS) -c -o $@ $<
.PHONY: clean
clean:
-rm -f $(OBJS)
全部回答
- 1楼网友:野味小生
- 2021-02-21 12:11
all: myapp
myapp: a.o b.o c.o
gcc -o myapp a.o b.o c.o -L../../lib -lerr -larm # -L指明库的路径
a.o: ../source/a.c ../include/a.h ../include/b.h ../../include/d.h
gcc -c ../source/a.c -I../include -I../../include # 大写的i,指明头文件的路径
b.o,c.o的依赖关系与a.o的写法类似。
这样应该可以生成相应的可执行文件
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯