Linux中include指令,c – 从Unix迁移到Linux时的Makefile Include指令

我的任务是迁移一个古老的基于C的代码,从Unix环境到

Linux.

该项目由多个Makefile组成,用于库的不同“模块”.

我已经解决了一些问题,但现在遇到了include指令的问题.

显然,Makefiles的构造方式是为不同的文件提供单独的include指令,并且它在Unix服务器中工作了多年.

例如:

include ../../../../util/genmake.def

processControl.slOBJS = processControl.o

outputControlOBJS = outputControl.o

inputControlOBJS = inputControl.o

cleanList = *.o *.C *.out processControl.sl outputControl inputControl

all: processControl.sl outputControl inputControl

processControl.sl: $(processControl.slOBJS)

include ../../../../util/genmake.slinc

outputControl: $(outputControlOBJS)

include ../../../../util/genmake.exeinc

inputControl: $(inputControlOBJS)

include ../../../../util/genmake.exeinc

include ../../../../util/genmake.inc

你可以在这里看到,tabbed包含,只能引用指定的目标!它们是该目标的配方的一部分.

但是,这个构造在Linux中不起作用,我收到此错误:

include ../../../../util/genmake.slinc

make: include: Command not found

make: *** [processControl.sl] Error 127

显然,我不能只删除标签,因为包含应仅适用于该目标…

所以,我试图用shell’source’命令替换它来源包含的文件,如:

source ../../../../util/genmake.slinc

这显然不起作用,我也尝试将包含的代码直接引入include文件(注释掉include命令) – 这会处理与Makefile相关的错误,但这不是一个好的解决方案,因为它真的很难迁移和维护它,不得不将整个项目中的相同代码复制到所有模块中,然后当然每一个微小的变化都要反映在所有文件上.

任何Make专家可以就此问题提出建议吗?

此外,一般来说,欢迎任何有关如何最好地处理此迁移任务的建议:)

谢谢!

编辑 – 额外信息:

genmake.slinc的内容:

#######################################################################

## This include will inherit the target and dependent files in

## a make file that inlcudes it.

## The inclusion of this file should look like:

##

## {target}: {dependent file list}

## include genmake.slinc

##

#######################################################################

@echo "----------------------------------------------------------------"

@echo " (G) Creating shared library $@ from $($(MaKeObJs:x=$(@)OBJS))";

@echo "----------------------------------------------------------------"

@echo "$(CPP) -b -o $@ $($(MaKeObJs:x=$(@)OBJS))"

@$(CPP) -b -o $@ $($(MaKeObJs:x=$(@)OBJS))

@echo " Moving shared library to $(SHLIBINSTALL) as lib$(@)"

@$(MV) $@ $(SHLIBINSTALL)/lib$(@)

@echo "----------------------------------------------------------------"

那些是@之前的标签.

现在genmake.exeinc的内容:

#######################################################################

## This include will inherit the target and dependent files in

## a make file that inlcudes it.

## The inclusion of this file should look like:

##

## {target}: {dependent file list}

## include /opt/app/fba/util/genmake.exeinc

##

#######################################################################

@cp $(SHLIBINSTALL)/* $(TEMP_SHLIB_DIR)/.

@echo "----------------------------------------------------------------"

@echo " (G) Linking $($(MaKeObJs:x=$(@)OBJS)) to make $@ "

@echo " LDOPTS set to: $(LDOPTS)"

# @echo " $(PURIFY) $(LD) "

@echo " SHLIB Temp Path: $(TEMP_SHLIB_DIR)

@echo " FBA libraries: $(FBALIB)"

@echo " Application libraries: $(APPLIBS)"

$(PURIFY) $(LD) -o $@ $($(MaKeObJs:x=$(@)OBJS)) \

$(CXXOPTS) \

$(LDFLAGS) \

$(FBALIB) \

$(PROLDLIBS) \

`cat /usr/local/opt/oracle/product/t1c3d771/lib/ldflags` \

`cat /usr/local/opt/oracle/product/t1c3d771/lib/sysliblist` \

$(APPLIBS)

@echo " Moving executable to $(EXEINSTALL) "

@$(MV) $@ $(EXEINSTALL)

@echo "----------------------------------------------------------------"

如果我转到Makefile,并删除包含的主要选项卡,我会收到此错误:

../../../../util/genmake.slinc:10:***命令在第一个目标之前开始.停止.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值