关于Makefile的简单问题

时间:2010-12-04 06:29:45

标签: makefile gnu-make

我有一个关于tiobench的以下Makefile。我写的。问题是,当我执行make all时,这不会让我进入安装目录。为什么?

# Makefile for tiotest

#include $(shell while [ "`pwd`" != / -a \! -r options.mk ]; do cd .. ; done ; pwd )/options.mk

#CFLAGS=-O3 -fomit-frame-pointer -Wall
CFLAGS=-O2 -Wall

#DEFINES=-DUSE_MMAP 
#-DUSE_MADVISE

# This enables support for 64bit file offsets, allowing
# possibility to test with files larger than (2^31) bytes.

#DEFINES=-DLARGEFILES

#DEFINES=

MODULE=tiotest
PROJECT=tiobench
# do it once instead of each time referenced
VERSION=$(shell egrep "tiotest v[0-9]+.[0-9]+" tiotest.c | cut -d " " -f 7 | sed "s/v//g")
DISTNAME=$(PROJECT)-$(VERSION)

INSTALL := $(CURDIR)/install
INSTALL_DIR := $(INSTALL)/test/bin
BOM := $(CURDIR)/BOM
BUILDRESULTS := $(CURDIR)/buildresults
MODULE := tiotest

build: $(MODULE)

crc32.o: crc32.c crc32.h
    $(CC) -c $(CFLAGS) $(DEFINES) crc32.c -o crc32.o

tiotest.o: tiotest.c tiotest.h crc32.h crc32.c Makefile
    $(CC) -c $(CFLAGS) $(DEFINES) tiotest.c -o tiotest.o

$(MODULE): tiotest.o crc32.o
    $(CC) -o $(MODULE) tiotest.o crc32.o -lpthread
    @echo
    @echo "./tiobench.pl --help for usage options"
    @echo

configure:

clean: clean-install
    rm -f tiotest.o crc32.o $(MODULE) core

distclean: clean

clean-install:
    -rm -rf $(INSTALL) $(BUILDRESULTS)

install: clean-install build
    mkdir -p $(INSTALL_DIR)
    cp $(MODULE) $(INSTALL_DIR)
    #$(STRIP) $(INSTALL_DIR)/$(MODULE)
    @echo install tree is in $(INSTALL)

buildresults: install
    mkdir $(BUILDRESULTS)
    cd install && tar cf - `cat $(BOM)` | (cd $(BUILDRESULTS) ; tar xfp -)
    @echo buildresults tree is in $(BUILDRESULTS)

all: distclean configure build install buildresults

.PHONY: build clean-install install buildresults clean distclean all

1 个答案:

答案 0 :(得分:2)

命令在子shell中运行。它们不能影响运行make all

的shell的当前工作目录