Chinaunix

标题: makefile问题-中级 [打印本页]

作者: fufelixzh    时间: 2011-09-30 10:44
标题: makefile问题-中级
如何在makefile中区别操作系统和打印变量?
我在makefile中使用
CURHOST      = `uname`
echo $CURHOST
all: coolpkgadd
但是报错

求正解
作者: x5miao    时间: 2011-09-30 10:56
echo指令为什么会独立出现?
makefile里面规则的一般格式是
目标:依赖项[;命令
[tab]   [命令
           [...]]]

我觉得这不是中级,而是入门级
作者: fufelixzh    时间: 2011-09-30 13:35
回复 2# x5miao


    请问具体如何实现,根据不同os编译不同文件,同时echo相关信息呢,举个例子
作者: x5miao    时间: 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里面判断操作系统类型,编译的过程只和编译工具链以及编译的目标机器相关,和操作系统有什么必然关系吗?
作者: fufelixzh    时间: 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不都已经执行了嘛
作者: x5miao    时间: 2011-09-30 19:34
没有.PHONY你怎么知道all和printsysinfo的规则都执行了?
作者: 毛xx总理    时间: 2011-09-30 20:59
看手册。
作者: fufelixzh    时间: 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中实现
作者: fufelixzh    时间: 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

求正解,求高人
作者: fufelixzh    时间: 2011-10-12 15:38
使用gamil依赖关系却编译出错




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2