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
CURHOST = $(shell "uname -s")
ifeq($(CURHOST),linux)
OBJ+=file.c
else
OBJ+=file_x.c
endif
.PHONY:all printsysinfo
printsysinfo:
@echo $(CURHOST)
all: printsysinfo coolpkgadd
......
复制代码
当然这只能在类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