免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4076 | 回复: 25
打印 上一主题 下一主题

BSD下的Makefile应该如何写? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-16 23:14 |只看该作者 |倒序浏览
我的程序原来是在linux上编译运行的,现在想移植到BSD上,可是原来的Makefile不行了,我不知道该怎么改,请各位大侠指教,下面把我的Makefile贴出来:

DATA_INCDIR += -I.
CC = gcc
CXX = g++

CFLAGS += -g -c -Wall -D _LINZHEN

LD_FLAGS = -lpthread -lz -lpcap

DATA_OBJS += main.o globaldef.o statinfo.o

##################### INCLUDE SUBDIR MAKEFILE #######################
include ./cgagame/Makefile
include ./glworld/Makefile
include ./cmpp/Makefile
include ./dynapass/Makefile
include ./net/Makefile
include ./msn/Makefile
include ./radius/Makefile
include ./ultrasurf/Makefile
include ./mail/Makefile
include ./telnet/Makefile
include ./ymsg/Makefile
include ./icq/Makefile
include ./unknow/Makefile
include ./mir3/Makefile
include ./mu/Makefile
include ./uc/Makefile
include ./p2p/Makefile
include ./ftp/Makefile
include ./qq/Makefile
include ./http/Makefile
include ./tcpmanager/Makefile
include ./common/Makefile


###########################   END INCLUDE #################################

CXXFLAGS = $(CFLAGS)
CXXFLAGS += $(DATA_INCDIR)
TARGET = tashan

all: $(TARGET)

$(TARGET):$(DATA_OBJS)
        @echo  "Linking $(TARGET)"
        $(CPLUSPLUS) -o $(TARGET) $(DATA_OBJS) rockeyapi.o $(LD_FLAGS)

#%.o:%.cpp
#        @echo  "Compiling $*.cpp"
#        $(CPLUSPLUS) $(CFLAGS) $(DATA_INCDIR)  $*.cpp -o $@

cleanall:
        rm -rf $(DATA_OBJS)
        rm -rf $(TARGET)

clean:
        @echo "$(CPLUSPLUS)"
        rm -rf $(DATA_OBJS)
        rm -rf $(TARGET)

每个子目录下的makefile中只是把该目录下的头文件加到DATA_INCDIR变量中,把需要的.o文件加到DATA_OBJS变量中,使用这个Makefile可以把所有的cpp文件编译成.o文件,但是所有的文件都放在项目的根目录下,这样在link的时候,make报找不到.o文件的错误。因为DATA_OBJS变量指定的.o文件是带路径的。

在linux下编译的时候,%.o:%.cpp和后面的两行是没有注释的。在bsd下,如果把这几行去掉注释,make报don't know how to make %.cpp的错误,真是晕菜啦。

我想让make把.cpp编译成的.o文件放在与.cpp文件相同的目录下面,然后把整个项目所有的.o文件链接成一个可执行文件,我应该怎么写这个Makefile?

[ 本帖最后由 FinalBSD 于 2005-11-16 23:15 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-16 23:18 |只看该作者
看不明白  $(CPLUSPLUS) 在哪定义的

论坛徽章:
0
3 [报告]
发表于 2005-11-16 23:22 |只看该作者
对不起,写错了,CPLUSPLUS应该是CXX,CFLAGS应该是CXXFLAGS,把Makefile重新贴一遍吧:

DATA_INCDIR += -I.
CC = gcc
CXX = g++

CFLAGS += -g -c -Wall -D _LINZHEN

LD_FLAGS = -lpthread -lz -lpcap

DATA_OBJS += main.o globaldef.o statinfo.o

##################### INCLUDE SUBDIR MAKEFILE #######################
include ./cgagame/Makefile
include ./glworld/Makefile
include ./cmpp/Makefile
include ./dynapass/Makefile
include ./net/Makefile
include ./msn/Makefile
include ./radius/Makefile
include ./ultrasurf/Makefile
include ./mail/Makefile
include ./telnet/Makefile
include ./ymsg/Makefile
include ./icq/Makefile
include ./unknow/Makefile
include ./mir3/Makefile
include ./mu/Makefile
include ./uc/Makefile
include ./p2p/Makefile
include ./ftp/Makefile
include ./qq/Makefile
include ./http/Makefile
include ./tcpmanager/Makefile
include ./common/Makefile


###########################   END INCLUDE #################################

CXXFLAGS = $(CFLAGS)
CXXFLAGS += $(DATA_INCDIR)
TARGET = tashan

all: $(TARGET)

$(TARGET):$(DATA_OBJS)
        @echo  "Linking $(TARGET)"
        $(CXX) -o $(TARGET) $(DATA_OBJS) rockeyapi.o $(LD_FLAGS)

#%.o:%.cpp
#        @echo  "Compiling $*.cpp"
#        $(CXX) $(CXXFLAGS) $(DATA_INCDIR)  $*.cpp -o $@

cleanall:
        rm -rf $(DATA_OBJS)
        rm -rf $(TARGET)

clean:
        @echo "$(CXX)"
        rm -rf $(DATA_OBJS)
        rm -rf $(TARGET)

[ 本帖最后由 FinalBSD 于 2005-11-16 23:27 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2005-11-16 23:23 |只看该作者
怎么变成了一个图标?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2005-11-16 23:26 |只看该作者
http://www.freebsd.org/doc/en_US ... handbook/index.html

建议看这里然后做bsd的开发。

论坛徽章:
0
6 [报告]
发表于 2005-11-16 23:33 |只看该作者
晕!版主要是知道的话告诉我行吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-11-16 23:37 |只看该作者
原帖由 zzbwang 于 2005-11-16 23:33 发表
晕!版主要是知道的话告诉我行吗?

我不知道,Qiao知道

论坛徽章:
0
8 [报告]
发表于 2005-11-16 23:43 |只看该作者
Qiao不也是版主吗?我看了Qiao指出的那个文档,文档没有写对c++是否需要特别的处理,我所有的程序文件名字都是.cpp。我觉得我的Makefile写的是对的呀。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-11-16 23:46 |只看该作者
原帖由 zzbwang 于 2005-11-16 23:43 发表
Qiao不也是版主吗?我看了Qiao指出的那个文档,文档没有写对c++是否需要特别的处理,我所有的程序文件名字都是.cpp。我觉得我的Makefile写的是对的呀。

但是我想应该是.cpp --> .o,你认为呢

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
10 [报告]
发表于 2005-11-16 23:59 |只看该作者
找到了。

FreeBSD/Unix环境下的make命令详解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP