1

私はmakeファイルを作ることにほとんど問題はありません.これはコードです:

SHELL = /bin/sh

CC := gcc
CFLAGS := -Wall
VPATH = src:obj

HEADERS := parser.h
dirs = out obj

%.o : mkdirs %.c $(HEADERS)
    $(CC) -c $(word 2,$^) -o obj/$@ 

all : parser.o
    ar cr out/libsip.a $<  

clean : 
    rm -f -r $(dirs)

mkdirs :
    mkdir -p $(dirs)

make を実行しようとすると、次のエラーが発生します。

mkdir -p out obj
gcc -c src/parser.c -o obj/parser.o 
ar cr out/libsip.a parser.o
file parser.o not found

parser.o が正しいパスに置き換えられない理由がわかりません。自動変数を使用しました

4

1 に答える 1

1
%.o : mkdirs %.c $(HEADERS)
    $(CC) -c $(word 2,$^) -o obj/$@ 

all : parser.o
    ar cr out/libsip.a $<

parser.o現在のディレクトリにファイルを作成するように make に指示しています。

次に%.o、ルールによってobj、現在のディレクトリではなくディレクトリにファイルが作成されます。

arコマンドはそれを見つけることができません。

VPATH前提条件を見つけるためのものです。obj/parser.oすでに存在している場合、make はall私が信じているターゲットに対してそれを見つけるでしょう。

VPATH を使用しない方法を参照してください。

于 2015-01-23T18:20:38.543 に答える