[原创]Ubuntu 中学习 C/C++ 编程基础入门教程
时间:2010-08-23
来源:互联网
|-- 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放在同一目录下都能通过。
希望有达达明白我这个半吊子描述的问题。。。我也不知道怎么说清除了。。呵呵。。
作者: formylove2 发布时间: 2010-08-23
OBJS=${SRCS:.c=.o}
所以
OBJS=main.o callbacks/callbacks.o
INCS=h/target.h callbacks/callbacks.h
${OBJS}:${INCS}
所以
main.o callbacks/callbacks.o:h/target.h callbacks/callbacks.h
嗯,这样看你觉得对吗?
main.o应该需要main.c,callbacks.o应该需要callback.c,对吧?
你前面定义的SRC在后面编译的时候好像没用到哦?是不是应该${OBJS}:${SRCS}然后${SRCS}:${INCS}呢?
你可以试着把所有宏全部展开来,然后看看究竟哪里出了错。
Good luck!
作者: neil.sun 发布时间: 2010-08-23

作者: zhoucga 发布时间: 2010-08-23
一般我都是用ide的
作者: fanhe 发布时间: 2010-08-24
|-- 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放在同一目录下都能通过。
希望有达达明白我这个半吊子描述的问题。。。我也不知道怎么说清除了。。呵呵。。
作者: formylove2 发布时间: 2010-08-23
OBJS=${SRCS:.c=.o}
所以
OBJS=main.o callbacks/callbacks.o
INCS=h/target.h callbacks/callbacks.h
${OBJS}:${INCS}
所以
main.o callbacks/callbacks.o:h/target.h callbacks/callbacks.h
嗯,这样看你觉得对吗?
main.o应该需要main.c,callbacks.o应该需要callback.c,对吧?
你前面定义的SRC在后面编译的时候好像没用到哦?是不是应该${OBJS}:${SRCS}然后${SRCS}:${INCS}呢?
你可以试着把所有宏全部展开来,然后看看究竟哪里出了错。
Good luck!
作者: neil.sun 发布时间: 2010-08-23

作者: zhoucga 发布时间: 2010-08-23
一般我都是用ide的
作者: fanhe 发布时间: 2010-08-24
|-- 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放在同一目录下都能通过。
希望有达达明白我这个半吊子描述的问题。。。我也不知道怎么说清除了。。呵呵。。
作者: formylove2 发布时间: 2010-08-23
OBJS=${SRCS:.c=.o}
所以
OBJS=main.o callbacks/callbacks.o
INCS=h/target.h callbacks/callbacks.h
${OBJS}:${INCS}
所以
main.o callbacks/callbacks.o:h/target.h callbacks/callbacks.h
嗯,这样看你觉得对吗?
main.o应该需要main.c,callbacks.o应该需要callback.c,对吧?
你前面定义的SRC在后面编译的时候好像没用到哦?是不是应该${OBJS}:${SRCS}然后${SRCS}:${INCS}呢?
你可以试着把所有宏全部展开来,然后看看究竟哪里出了错。
Good luck!
作者: neil.sun 发布时间: 2010-08-23

作者: zhoucga 发布时间: 2010-08-23
一般我都是用ide的
作者: fanhe 发布时间: 2010-08-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28