|
.
|-- Makefile
|-- callbacks
| |-- callbacks.c
| `-- callbacks.h
|-- gui.glade
|-- h
| `-- target.h
`-- main.c
这是我目录下的源文件摆放顺序,我将所有的头文件定义单独放在了h文件夹下,然后把所有回调函数放在了callbacks文件夹下。
以下是我的makefile
CC=gcc
SRCS=main.c callbacks/callbacks.c
PROG_NAME=main
INCS=h/target.h callbacks/callbacks.h
OBJS=${SRCS:.c=.o}
#从xx.c 文件得到 xx.o 文件
LIBS=gtk+-2.0
#----------------------------------用户修改区域 结束
CFLAGS=`pkg-config --cflags ${LIBS}` -g -Wall
#指代编译程序时使用到的一些编译选项, -g 表示生成调试信息以供GDB使用
LDFLAGS=`pkg-config --libs ${LIBS}` -g -Wall
#用来指代进行程序连接时使用到的一些选项
#-----------------------------------
all: ${PROG_NAME}
##这一句开始,Makefile就开始使用 目标:依赖 的关系来处理真正的程序编译而它们下边以 TAB 键开始的行就是满足依赖关系后要运行的程序了
${PROG_NAME}{OBJS}
${CC} -o ${PROG_NAME} ${OBJS} ${LDFLAGS}
#注意:上边”${CC}" 的前边有一个TAB键,而不是空格
${OBJS}{INCS}
##如果有头文件修改则自动编译源文件
.c.o:
${CC} -c $< ${CFLAGS}
#当遇到一个 .c 文件,将使用这条命令将.c文件编译为.o文件 命令中$<用来代替对应的.c 文件的文件名。(通配符?)
clean:
rm -f *.o ${PROG_NAME}
rebuild: clean all
然后编译后出现如下情况:gcc: callbacks/callbacks.o: No such file or directory
我现在一直不清除如何分开头文件和头文件相关的.c文件的摆放顺序(可能我描述这个问题也有问题),关于这个的定义部分我看一些教程也是一知半懂,我只是想把这个程序写得有条例一些,各种模块函数调用都用文件夹分类等等,但我不知道如何在makefile中组织这些关系。这个程序里的callbacks.c 在callbacks文件夹里,main.c中调用了callback.h,同样callback.h也在callbacks文件夹里。
main.c的开头是这样:
#include "h/target.h"
#include "callbacks/callbacks.h"
程序本身很简单,我把callbacks.h和callbacks.c和main.c放在同一目录下都能通过。
希望有达达明白我这个半吊子描述的问题。。。我也不知道怎么说清除了。。呵呵。。 |
|