首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模式规则未按预期工作

问模式规则未按预期工作
EN

Stack Overflow用户
提问于 2012-08-10 03:33:59
回答 1查看 269关注 0票数 0

我有一个GNU-make makefile (gcc v4.1.2)的一部分,它不能像我预期的那样工作。如果在基本/build目录中运行make,我希望递归地构建子目录中的四个库

代码语言:javascript
复制
/prj
|--/build
|  |--makefile
|  |--/Tables.lib
|  |  |--makefile
|  |--/General.lib
|  |  |--makefile (etc..)
|--/lib
|--/src

/prj/build/makefile的简短代码:

代码语言:javascript
复制
LIB_DIR = /prj/lib

LIBRARY := libcomposition_adjustment.a libtables.a libgeneral.a libbiblio.a
DIRS := Tables.lib Composition_adjustment.lib General.lib Biblio.lib

all: $(LIBRARY)
#all: $(LIB_DIR)/libcomposition_adjustment.a # this line works

%.a : $(LIB_DIR)/%.a

$(LIB_DIR)/libtables.a:
    cd Tables.lib; $(MAKE)

$(LIB_DIR)/libcomposition_adjustment.a:
    cd Composition_adjustment.lib; $(MAKE)

$(LIB_DIR)/libgeneral.a:
    cd General.lib; $(MAKE)

$(LIB_DIR)/libbiblio.a: libgeneral.a
    cd Biblio.lib; $(MAKE)

它说:“没有规则来使目标'libcomposition_adjustment.a‘成为'all’所需的。停止”。但我认为%.a : $(LIB_DIR)/%.a行可以处理这个问题。我的模式规则是不正确的吗?

如果我尝试注释掉的第二个all:行,它会像预期的那样工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-10 05:12:04

问题出在这里:

代码语言:javascript
复制
%.a : $(LIB_DIR)/%.a

这是一个没有命令的模式规则,Make根本不会将其解释为独立的规则。有不止一种方法可以解决这个问题;最简单的方法可能是给它一个不做任何事情的命令:

代码语言:javascript
复制
%.a : $(LIB_DIR)/%.a
    @:

但更好的方法是完全不使用有问题的规则:

代码语言:javascript
复制
LIB_DIR = /prj/lib

LIBRARY := libcomposition_adjustment.a libtables.a libgeneral.a libbiblio.a
LIBRARY := $(addprefix $(LIB_DIR)/,$(LIBRARY))

all: $(LIBRARY)

$(LIB_DIR)/libtables.a:
    cd Tables.lib; $(MAKE)

$(LIB_DIR)/libcomposition_adjustment.a:
    cd Composition_adjustment.lib; $(MAKE)

$(LIB_DIR)/libgeneral.a:
    cd General.lib; $(MAKE)

$(LIB_DIR)/libbiblio.a: $(LIB_DIR)/libgeneral.a
    cd Biblio.lib; $(MAKE)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11890671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档