首页 文章

如果目标丢失,如何在Makefile中描述将c编译为obj?

提问于
浏览
0

我的项目中有一个库,我想强制gmake只为库文件尚未构建时才为该库构建目标文件 .

目前,在依赖项之后,始终构建对象 .

那么,如果库已经存在,是否可以描述阻止编译的规则?

添加的例子:

all: prj.exe
    @echo build all.

prj.exe: main.o libbar.a
    gcc main.o -lbar -L. -o prj.exe

libbar.a: foo.o
    ar rcs libbar.a foo.o

%.o: %.c
    gcc -c $< -o $@

1 回答

  • 2

    最简单的方法是使用递归make . 任何没有先决条件的目标都被声明为最新的,当且仅当它存在时 . 因此,声明没有先决条件的库目标 . 然后,为了构建目标文件,你应该使用递归 .

    所以,像这样:

    libfoo.a:
            @ $(MAKE) all_objects
            ...commands to build libfoo.a...
    
    all_objects: $(OBJFILES)
    

相关问题