makefile

ericming200409 2011-03-31 09:29:39
我有一个project, 有inc src obj bin四个目录,针对这样的项目组织,我该如何写makefile,麻烦大侠详细说明一下
...全文
290 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshn13 2012-11-15
  • 打赏
  • 举报
回复
为啥不用autotools 啊?!
liuzheng2008 2012-11-09
  • 打赏
  • 举报
回复

CC = gcc
CFLAGS := -I inc/
TARGET_OBJ_DIR := obj
TARGET_SRC_DIR := src

TARGET_SRC_FILES := $(wildcard $(TARGET_SRC_DIR)/*)
TARGET_OBJS := $(addprefix $(TARGET_OBJ_DIR)/,$(notdir $(patsubst %.c,%.o,$(TARGET_SRC_FILES))))

TARGET := $(TARGET_OBJ_DIR)/test

$(TARGET) : $(TARGET_OBJS)
	$(CC) $(TARGET_OBJS) -o $@ $(CFLAGS)

$(TARGET_OBJ_DIR)/%.d : $(TARGET_SRC_DIR)/%.c
	$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
	sed 's,^,$(TARGET_OBJ_DIR)/,' $@.$$$$ > $@; \
	rm $@.$$$$

$(TARGET_OBJ_DIR)/%.o : $(TARGET_SRC_DIR)/%.c
	$(CC) -c $(CFLAGS) $< -o $@

include $(TARGET_OBJS:.o,.d)
gmy_jswxa 2012-02-28
  • 打赏
  • 举报
回复
有个跟我一起写makefile不错 参看下就行了 下载地址:http://www.ctdisk.com/file/4807403
ak_kay 2011-04-11
  • 打赏
  • 举报
回复
INCLUDE = -I../inc
CC = gcc
CFLAGS = -std=c99 -g -s -O2 $(INCLUDE) -static

应该加上 -I 连接头文件就可以了
fay8048 2011-04-03
  • 打赏
  • 举报
回复
哥们,你的要求和依赖关系没有说明。怎么说
先看看Makefile的基本教程
应该可以写出来
有工具:
你查查 automake
很强大,还有几个依赖的文件要安装
自己看吧
luxihua 2011-04-02
  • 打赏
  • 举报
回复
可以通过让相关的文件取名的时候相似,这样就不用每次都手工添加文件了。
天上游的鱼 2011-04-02
  • 打赏
  • 举报
回复
兄台,听说过 cmake 么...

当然如果你执意要写Makefile也行,试过搜索一些Makefile模板么...
李培 2011-04-02
  • 打赏
  • 举报
回复
讲每个文件夹中的 .o文件 整合成 lib 的.a文件

ALL:libsrc.a

libserv.a:src.o srcd.o
$(ARCH) libserv.a src.o srcd.o
rm *.o
src.o:src.c
$(CC) -c src.c
srcd.o:srcd.c
$(CC) -c srcd.c
Clean:
rm libsrc.a

然后在生产执行程序的时候,将所有文件夹下的.a文件链接起来
向良玉 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 justkk 的回复:]

inc 头文件,编译命令中用-I 指定
src 源文件
obj .o文件,用-c -o 指定路径
bin 执行文件,用-o 指定
[/Quote]
+1
boat 2011-04-01
  • 打赏
  • 举报
回复
各位在写代码的时候 makefile 都必须自己写么?(我是新手)
有没有什么工具,可以分析我的依赖关系,自动生成makefile?
justkk 2011-04-01
  • 打赏
  • 举报
回复
inc 头文件,编译命令中用-I 指定
src 源文件
obj .o文件,用-c -o 指定路径
bin 执行文件,用-o 指定
techres 2011-04-01
  • 打赏
  • 举报
回复
楼上说得有道理,先弄清楚你的编译管理需求到底是什么?然后才好确定怎么写Makefile
ericming200409 2011-04-01
  • 打赏
  • 举报
回复
我上面的makefile已经可以解决我的问题了,但是每个.o文件的依赖项还是需要手动添加相应的头文件,这很麻烦,看到网上有解决方案,是通过gcc -MM等等,不知道大家有没有其它解决方法
ericming200409 2011-04-01
  • 打赏
  • 举报
回复
我不知道楼上各位写过没,真正写起来没有说的那么简单,比如是用一个makefile 还是用多个makefile,路径说明怎么解决。我自己写了一个,放在project目录下,大家多提意见

VPATH = bin:inc:src:obj

CC = gcc
CFLAGS = -std=c99 -g -Iinc

# add corresponding .o file here when add .c to the project
OBJS = main.o


# $<: set of the dependencies,$@: set of the targets
magiclogin:$(OBJS)
$(CC) $(addprefix obj/,$<) -o bin/$@ $(CFLAGS)


#######################################################
# add .o file's generate rule
main.o: main.c
$(CC) -c $< -o obj/$@ $(CFALGS)

#######################################################


.PHONY: clean
clean:
-rm -f obj/*
chenxiancool 2011-03-31
  • 打赏
  • 举报
回复
个人感觉应该先搞清楚你的project各个目录中文件间的关系(project的整体运行流程),然后按照Makefile 文件的基本规则写就OK了

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧