linux下要编译多个.c和.h文件要怎么命令编译?

angelsjia 2011-05-05 01:39:19
linux下要编译多个.c和.h文件要怎么命令编译?
...全文
6283 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
取啥都被占用 2014-01-20
  • 打赏
  • 举报
回复
各位好!刚开始了解makefile,想边用边体会。以下就是借鉴了jernymy贴出来的makefile code。 我发现用它可以直接make (单个c程序),很方便。可是当我有多个头、源文件(list.c/list.h/films3(含main部分))的时候,我对以下的code作出来了修改(红色字体部分),然后又试着make films3。这下就不好使了,我的判断是list.c并没有被连接到。 makefile 以及这三个c语言程序是在一个目录下的。 麻烦哪位有经验的给看一眼,帮个忙,谢谢!如果需要查看编译器的报错信息,也可以附上,但是嫌写得太长了,所以就先不贴了。 另外,如果不是想帮忙解决针对这个程序的问题的信息,就不要回复了,本人不是专业程序员,但是也知道,talk is cheap, show us the code. 最后, 那篇(和我一起写makefile)文章本人很早就读过。但是太笨了,我读懂了原理,却没有学会应用。这也是为啥,我尝试改写别人的makefile的原因,想通过实际操作,再去理解掌握那篇文章描述的makefile。以下code没有用code tag, 是发现用了之后,红字不会显示而是变成代码符号。 ##################################################################### ## file : test makefile for build current dir .c ## ## author : jernymy ## ## date-time : 05/06/2010 ## ##################################################################### CC = gcc CPP = g++ RM = rm -rf ## debug flag DBG_ENABLE = 1 ## source file path SRC_PATH := list.c ## target exec file name TARGET := test ## get all source files SRCS += $(wildcard $(SRC_PATH)/*.c) ## all .o based on all .c OBJS := $(SRCS:.c=.o) ## need libs, add at here LIBS := ## used headers file path INCLUDE_PATH := list.h ## used include librarys file path LIBRARY_PATH := /lib ## debug for debug info, when use gdb to debug ifeq (1, ${DBG_ENABLE}) CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1 endif ## get all include path CFLAGS += $(foreach dir, $(INCLUDE_PATH), -I$(dir)) ## get all library path LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib)) ## get all librarys LDFLAGS += $(foreach lib, $(LIBS), -l$(lib)) all: clean build build: $(CC) -c $(CFLAGS) $(SRCS) $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS) $(RM) $(OBJS) clean: $(RM) $(OBJS) $(TARGET)
非凡glj 2014-01-13
  • 打赏
  • 举报
回复
可以手工写,也可以用工具生成makefile,比如用automake、cmake、qmake等 要更方便的的话可以装个eclipse或qt,建个工程后把源文件拖进去
取啥都被占用 2014-01-13
  • 打赏
  • 举报
回复
楼上那个格式会用,就是想尝试用用makefile. 已经按照"wenxy1"版主的makefile格式改写,解决了这个问题。不过还是指望着有人愿意对于我前面贴的那个makefile格式指出一下错误,帮忙讲解下。
  • 打赏
  • 举报
回复
不想寫Makefile就差不多按下面這個格式打: gcc file1.c file2.c file3.c -l head1.h -o file
取啥都被占用 2014-01-01
  • 打赏
  • 举报
回复
##################################################################### ## file : test makefile for build current dir .c ## ## author : jernymy ## ## date-time : 05/06/2010 ## ##################################################################### CC = gcc CPP = g++ RM = rm -rf ## debug flag DBG_ENABLE = 1 ## source file path SRC_PATH := list.c ## target exec file name TARGET := test ## get all source files SRCS += $(wildcard $(SRC_PATH)/*.c) ## all .o based on all .c OBJS := $(SRCS:.c=.o) ## need libs, add at here LIBS := ## used headers file path INCLUDE_PATH := list.h ## used include librarys file path LIBRARY_PATH := /lib ## debug for debug info, when use gdb to debug ifeq (1, ${DBG_ENABLE}) CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1 endif ## get all include path CFLAGS += $(foreach dir, $(INCLUDE_PATH), -I$(dir)) ## get all library path LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib)) ## get all librarys LDFLAGS += $(foreach lib, $(LIBS), -l$(lib)) all: clean build build: $(CC) -c $(CFLAGS) $(SRCS) $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS) $(RM) $(OBJS) clean: $(RM) $(OBJS) $(TARGET) [/code][/quote] 各位好!刚开始了解makefile,想边用边体会。以上就是借鉴了jernymy贴出来的makefile code。我发现用它可以直接make (单个c程序),很方便。可是当我有多个头、源文件(list.c/list.h/films3(含main部分))的时候,我对以上的code作出来了修改(红色字体部分),然后又试着make films3。这下就不好使了,我的判断是list.c并没有被连接到。 makefile 以及这三个c语言程序是在一个目录下的。麻烦哪位有经验的给看一眼,帮个忙,谢谢!如果需要查看编译器的报错信息,也可以附上,但是嫌写得太长了,所以就先不贴了。
疯疯癫癫 2012-06-27
  • 打赏
  • 举报
回复
有一本书叫《跟我一起写makefile》
Wenxy1 2012-06-26
  • 打赏
  • 举报
回复

################################################################################
# File: Makefile
# Description:
# Author: Xiaoyong Wen <wen_kernel@163.com>, 20120523, PM.
#
# Fix hisoty:
#
################################################################################


debug := 1
ifdef debug
CFLAGS += -g
else
CFLAGS += -O2
endif

CC := gcc
CFLAGS += -I.
LDFLAGS += -L.

bin := main
obj := main.o a.o b.o
#src := a.c b.c main.c a.h b.h
src := $(wildcard *.c) $(wildcard *.h)

.PHONY : clean all debug

all : $(bin)
# @-ls -al $(bin)

$(bin) : $(obj)

$(obj) : $(src)


debug:
@echo $(src)
@echo $(obj)
@echo $(CFLAGS)
@echo $(LDFLAGS)
@echo $(Q)

clean:
rm -f $(bin) $(obj)
Toria2015 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 8 楼 jernymy 的回复:

引用 2 楼 hairetz 的回复:
写一个基本的makefile

http://www.chinaunix.net/jh/23/408225.html


写个makefile比较方便啦
C/C++ code

##########################################################……
[/Quote]

我这里怎么报错呢?缺少分隔符??????
fuxinghua123 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jernymy 的回复:]

引用 2 楼 hairetz 的回复:
写一个基本的makefile

http://www.chinaunix.net/jh/23/408225.html


写个makefile比较方便啦
C/C++ code

#####################################################################
## file ……
[/Quote]谢谢了,这个makefile省了不少事
smilestone322 2011-05-07
  • 打赏
  • 举报
回复
写个makefile,改一下别人的makefile就行
jernymy 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hairetz 的回复:]
写一个基本的makefile

http://www.chinaunix.net/jh/23/408225.html
[/Quote]

写个makefile比较方便啦

#####################################################################
## file : test makefile for build current dir .c ##
## author : jernymy ##
## date-time : 05/06/2010 ##
#####################################################################

CC = gcc
CPP = g++
RM = rm -rf

## debug flag
DBG_ENABLE = 1

## source file path
SRC_PATH := .

## target exec file name
TARGET := test

## get all source files
SRCS += $(wildcard $(SRC_PATH)/*.c)

## all .o based on all .c
OBJS := $(SRCS:.c=.o)


## need libs, add at here
LIBS :=

## used headers file path
INCLUDE_PATH := .

## used include librarys file path
LIBRARY_PATH := /lib

## debug for debug info, when use gdb to debug
ifeq (1, ${DBG_ENABLE})
CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1
endif

## get all include path
CFLAGS += $(foreach dir, $(INCLUDE_PATH), -I$(dir))

## get all library path
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))

## get all librarys
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))


all: clean build

build:
$(CC) -c $(CFLAGS) $(SRCS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
$(RM) $(OBJS)

clean:
$(RM) $(OBJS) $(TARGET)


jianmin09 2011-05-06
  • 打赏
  • 举报
回复
把编译命令写在makefile内,还能修改。
awsqsh 2011-05-06
  • 打赏
  • 举报
回复
Makefile必须得
eliry 2011-05-05
  • 打赏
  • 举报
回复
用命令的话,楼上的是正解。不过最好还是自己写Makefile,便于编译和管理
justkk 2011-05-05
  • 打赏
  • 举报
回复
简单的单行命令
gcc 1.c 2.c 3.c 4.c ...
IamGooday 2011-05-05
  • 打赏
  • 举报
回复
分成2个步骤,先是只编译(gcc -c xxx),然后是连接(ld)。以上2条命令真正写的时候由于涉及很多文件,比较麻烦,因此通常都用Makefile来集成。
  • 打赏
  • 举报
回复
写一个基本的makefile

http://www.chinaunix.net/jh/23/408225.html
谭海燕 2011-05-05
  • 打赏
  • 举报
回复
写个makefile
设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的中断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那样,无论你的电脑什么配置,一个Windows安装包,都可以直接下载安装运行呢?设备树机制,实现了Linux内核和硬件平台的解耦:每个硬件平台的硬件资源使用一个设备树文件(xxx.dts)来描述,而不是在arch/arm下以.c 或 .h 文件来定义。Linux内核是一个通用的内核,在启动过程中,在通过解析设备树中的硬件资源来初始化某个具体的平台。 引入设备树后,很多和内核驱动开发的工作也发生了变化:以往驱动工程师关注的头文件宏定义、寄存器定义,现在这些基本上不用关注,关注的重点则转向了如何根据硬件平台去配置和修改设备树文件。很多驱动的编程接口也发生了变化,开始慢慢使用device tree提供的编程接口去开发驱动。本期课程主要面向嵌入式开发人员,分享Linux下驱动开发所需要的设备树知识和必备技能

23,125

社区成员

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

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