gcc编译大工程

「已注销」 2010-06-09 02:32:41
现在大概有十几个c文件,四五个头文件。其中有个main.c里面要调用所有c文件中函数,可能其中一些c文件调用其他c文件中的函数。请问有没有什么好的办法写makefile,或者像vc一样很好管理的方法。

看了一大堆用autoconf和automake等自动生成makefile的文档感觉还没有自己写来得省事。

是不是最好不要在c文件里用include引用另外的c文件,而是在makefile中将需要调用的c文件编译成.o,然后用gcc编译。这个有什么书或者网站详细说明的?
...全文
387 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
honemay 2010-06-09
  • 打赏
  • 举报
回复
额,我都没写过makefile文件。。
这两天有时间去学习一下,每次我都终端下编译,,
do_fork 2010-06-09
  • 打赏
  • 举报
回复
源代码文件在一万个以内的工程,哪能算大工程
几十个文件的,是极小的工程,或者说只能算小程序,不能算工程。
huanmie_09 2010-06-09
  • 打赏
  • 举报
回复
最好不要在c文件里用include引用另外的c文件,而是在makefile中将需要调用的c文件编译成.o,然后用gcc编译.
http://dev.csdn.net/htmls/20/20025.html
haierpro 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 z569362161 的回复:]

引用 4 楼 cattycat 的回复:
你的文件不是很多,注意依赖关系,编译成.o,然后链接成输出可执行的文件。


见过30G的大文件吗?不是说你错,文件不能按数量来比较大小的
[/Quote]

30G的大文件? 还真没见过,也不想见过
z569362161 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cattycat 的回复:]
你的文件不是很多,注意依赖关系,编译成.o,然后链接成输出可执行的文件。
[/Quote]

见过30G的大文件吗?不是说你错,文件不能按数量来比较大小的
redleaves 2010-06-09
  • 打赏
  • 举报
回复
为了编译方便....我经常只有几个.c/.cpp,其它全是.h ^_^
不过gnu make的性能实在是太差太差了...
为了生成依赖关系处理字符串的时间比编译的时间还长
但我又不太想用其它的字符串处理工具,因为依赖的其它工具一多,换个环境就要配置半天.郁闷
狂龙骄子 2010-06-09
  • 打赏
  • 举报
回复
学习啦~~
cattycat 2010-06-09
  • 打赏
  • 举报
回复
你的文件不是很多,注意依赖关系,编译成.o,然后链接成输出可执行的文件。
ottoCho 2010-06-09
  • 打赏
  • 举报
回复
http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html

认真学习这个.
jixingzhong 2010-06-09
  • 打赏
  • 举报
回复
编译成.o后一起链接,不可include .c文件
bobo_guan 2010-06-09
  • 打赏
  • 举报
回复
给你个简单的模板看看吧。
include源文件不要用。
如果要使用模块外的c文件,用静态或者动态链接库。

TARGET		=	xxx

INC_DIR = ./inc
SRC_DIR = ./src
SRC_EXT = ./ext_src
OBJ_DIR = ./obj

CC = gcc

OPT = -g
DEFINE = -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL
INCLD = -I. -I$(INC_DIR)

CFLAGS = $(OPT) $(DEFINE) $(INCLD)
LFLAGS =

INCS = \
$(INC_DIR)/xxxx.h \
$(INC_DIR)/xxxx.h \
$(INC_DIR)/xxxx.h \
$(INC_DIR)/xxxx.h \

OBJS = \
$(OBJ_DIR)/xxx.o \
$(OBJ_DIR)/xxx.o \
$(OBJ_DIR)/xxx.o \
$(OBJ_DIR)/xxx.o \ #有几个源文件写几个。

all : MKDIRS $(TARGET)

$(TARGET) : $(OBJS)
$(CC) $(LFLAGS) -o $(TARGET) $(OBJS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(INCS)
$(CC) -c $(CFLAGS) -o $@ $<

$(OBJ_DIR)/%.o: $(SRC_EXT)/%.c $(INCS)
$(CC) -c $(CFLAGS) -o $@ $< #有几个源文件夹写几个。

clean :
@-rm -f $(TARGET) $(OBJS)
@-rmdir $(OBJ_DIR)

MKDIRS :
@-mkdir $(OBJ_DIR)


winner8080 2010-06-09
  • 打赏
  • 举报
回复
学习makefile吧.

要不遇到大工程真的没办法.
我们的工程才4G,用双核CPU的电脑要编译5小时.
brookmill 2010-06-09
  • 打赏
  • 举报
回复
我这么说楼主可别生气,您这个不能算大工程。
有一个经典教材《跟我写makefile》,建议楼主找来看看。

是不是最好不要在c文件里用include引用另外的c文件,而是在makefile中将需要调用的c文件编译成.o,然后用gcc编译。
没错,是这样的。
严格来说是把一些.o用ld链接。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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