免费注册 查看新帖 |

Chinaunix

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

makefile问题-中级 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-30 10:44 |只看该作者 |正序浏览
如何在makefile中区别操作系统和打印变量?
我在makefile中使用
CURHOST      = `uname`
echo $CURHOST
all: coolpkgadd
但是报错

求正解

论坛徽章:
0
10 [报告]
发表于 2011-10-12 15:38 |只看该作者
使用gamil依赖关系却编译出错

论坛徽章:
0
9 [报告]
发表于 2011-10-11 11:11 |只看该作者
CURHOST=$(shell   "uname -s")

.PHONY:all printsysinfo
printsysinfo:
        echo $(CURHOST)
all: printsysinfo coolpkgadd setprio mklofs rmlofs runchroot coolrpm
ifeq ($(CURHOST),SunOs)
        coolpkgadd : coolpkgadd.o
                cc coolpkgadd.o -o coolpkgadd
        coolpkgadd.o : coolpkgadd.c
                cc -c coolpkgadd.c
        mklofs : VEglobdefs.o mklofs.o chklofs.o clrlofsdir.o
                cc VEglobdefs.o mklofs.o chklofs.o clrlofsdir.o -o mklofs
        VEglobdefs.o : VEglobdefs.c lofsdefs.h
                cc -c VEglobdefs.c
        mklofs.o : mklofs.c lofsdefs.h
                cc -c mklofs.c
        chklofs.o : chklofs.c lofsdefs.h
                cc -c chklofs.c
        clrlofsdir.o :clrlofsdir.c lofsdefs.h
                cc -c clrlofsdir.c

        rmlofs : VEglobdefs.o rmlofs.o chklofs.o clrlofsdir.o
                cc VEglobdefs.o rmlofs.o chklofs.o clrlofsdir.o -o rmlofs
        rmlofs.o : rmlofs.c lofsdefs.h
                cc -c rmlofs.c

        runchroot : VEglobdefs.o runchroot.o chklofs.o
                cc VEglobdefs.o runchroot.o chklofs.o -o runchroot
        runchroot.o : runchroot.c
                cc -c runchroot.c

        setprio : setprio.o
                cc setprio.o -o setprio
        setprio.o : setprio.c
                cc -c setprio.c
else
        coolrpm : coolrpm.o
                gcc coolrpm.o -o coolrpm
        coolrpm.o : coolrpm.c
                gcc -c coolrpm.c
endif
上述makefile编译的时候error,make: Fatal error in reader: Makefile, line 8: Unexpected end of line seen

求正解,求高人

论坛徽章:
0
8 [报告]
发表于 2011-10-11 10:21 |只看该作者
回复  fufelixzh 当然这只能在类unix系统上用。我不懂你为什么要在make里面判断操作系统类型,编译的过程只 ...
x5miao 发表于 2011-09-30 14:45



    因为在solaris和linux上产生的product的文件不一样,如在solaris下需要编译a.c b.c c.c 在linux下需要编译d.c e.c f.c,所以不得不在make里面判断,你有其他的解决方法吗,需要在一个makefile中实现

论坛徽章:
0
7 [报告]
发表于 2011-09-30 20:59 |只看该作者
看手册。

论坛徽章:
0
6 [报告]
发表于 2011-09-30 19:34 |只看该作者
没有.PHONY你怎么知道all和printsysinfo的规则都执行了?

论坛徽章:
0
5 [报告]
发表于 2011-09-30 15:25 |只看该作者
回复  fufelixzh 当然这只能在类unix系统上用。我不懂你为什么要在make里面判断操作系统类型,编译的过程只 ...
x5miao 发表于 2011-09-30 14:45



    帅哥,very good。
具体说一下:mklofs在solaris下编译
mklofs : VEglobdefs.o mklofs.o chklofs.o clrlofsdir.o
        cc VEglobdefs.o mklofs.o chklofs.o clrlofsdir.o -o mklofs
VEglobdefs.o : VEglobdefs.c lofsdefs.h
        cc -c VEglobdefs.c
mklofs.o : mklofs.c lofsdefs.h
        cc -c mklofs.c
chklofs.o : chklofs.c lofsdefs.h
        cc -c chklofs.c
coolrpm在linux下编译
coolrpm : coolrpm.o
        gcc coolrpm.o -o coolrpm
coolrpm.o : coolrpm.c
        gcc -c coolrpm.c

其次:.PHONY:all printsysinfo
这句可以去掉吧,.PHONY是没有依赖也执行。
后面的all 和printsysinfo不都已经执行了嘛

论坛徽章:
0
4 [报告]
发表于 2011-09-30 14:45 |只看该作者
本帖最后由 x5miao 于 2011-09-30 15:04 编辑

回复 1# fufelixzh
  1. CURHOST  = $(shell   "uname -s")
  2. ifeq($(CURHOST),linux)
  3.    OBJ+=file.c
  4. else
  5.    OBJ+=file_x.c
  6. endif

  7. .PHONY:all printsysinfo
  8. printsysinfo:
  9.       @echo $(CURHOST)
  10. all:  printsysinfo coolpkgadd
  11.       ......
复制代码
当然这只能在类unix系统上用。我不懂你为什么要在make里面判断操作系统类型,编译的过程只和编译工具链以及编译的目标机器相关,和操作系统有什么必然关系吗?

论坛徽章:
0
3 [报告]
发表于 2011-09-30 13:35 |只看该作者
回复 2# x5miao


    请问具体如何实现,根据不同os编译不同文件,同时echo相关信息呢,举个例子

论坛徽章:
0
2 [报告]
发表于 2011-09-30 10:56 |只看该作者
echo指令为什么会独立出现?
makefile里面规则的一般格式是
目标:依赖项[;命令
[tab]   [命令
           [...]]]

我觉得这不是中级,而是入门级
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP