2010-12-04 6 views
0

J'ai un Makefile suivant pour tiobench. Je l'ai écrit. Le problème est, quand je fais make all, cela ne me laisse pas dans le répertoire d'installation comme il se doit. Pourquoi ?Simple question à propos de Makefile

# 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 
+0

Que voulez-vous dire par "ne me laisse pas dans le répertoire d'installation"? – vanza

+0

Je voulais dire que je devrais rester dans ./install après 'make all' qui ne se produit pas. – abc

Répondre

2

Les commandes sont exécutées dans un sous-shell. ils ne peuvent pas effectuer le répertoire de travail en cours du shell à partir duquel vous avez exécuté make all

+0

'cd install' dans' cd install && tar cf - \ 'cat $ (BOM) \' | (cd $ (BUILDRESULTS); tar xfp -) 'n'est pas exécuté dans un sous-shell. Si je lance 'cd install && tar cf - \' cat $ (BOM) \ '| (cd $ (BUILDRESULTS); tar xfp -) 'sur la ligne de commande avec les répertoires appropriés en place, je suis laissé dans ./install. – abc

+0

oui, c'est correct quand vous l'exécutez dans le shell actuel mais 'make' exécute ses commandes shell dans un nouveau sous-shell –

+0

Je vois, merci. Je reviendrai avec les résultats de mes tests. – abc