2011-09-23 5 views
2

Tout d'abord, j'essaie de m'habituer à makefiles mais je suis nouveau avec ça. Le fichier suivant est censé, d'abord, compiler tous les fichiers ./src/*.cpp à ./src/*.o (où le nom de fichier survit) et ensuite compléter la compilation avec simulation.cpp et relier le tout ensemble. Maintenant, make renvoie le message d'erreur:make: -c: Commande non trouvée

make: -c: Command not found 

Je n'ai aucune idée de la marche à suivre! Est-ce que la construction générique fonctionnerait même de la manière désirée? Merci beaucoup pour votre effort!

#basic stuff 
TRUE = 1 
FALSE = 0 
SHELL := #!/bin/bash 

# path names 
SRCPATH = ./src/ 
CLEANPATH = ./res/ \ 
      ./crash/ 

# source files. 
MAIN  = simulation.cpp 

OBJS  = $(wildcard $(SRCPATH)*.o) 
SRCS  = $(wildcard $(SRCPATH)*.cpp) 
INCLUDES = $(wildcard $(SRCPATH)*.h) 

#GLOBAL MACROS PASSED TO PROGRAM! 
MODEL_MRT = $(TRUE) #if true model used is MRT else SRT 
PARALLEL  = $(TRUE) 
GRAVITY  = $(TRUE) 


# output file name 
OUT = simulation 

# C++ compiler flags (-g -O2 -Wall) 
CXXFLAGS = -g -Wall -O -fopenmp 
CXXDEFINES = -D MODEL=$(MODEL_MRT) -D PARALLEL=$(PARALLEL) -D GRAVITY=$(GRAVITY) 

# compiler 
CXX = g++ 

$(OUT) : $(OBJS) 
     $(CXX) $(CXXFLAGS) $(MAIN) $(OBJS) $(CXXDEFINES) -o $(OUT) 


$(OBJS) : $(SRCS) $(INCLUDES) 
     $(CXX) $(CXXFLAGS) -c $(SRCS) -o $(OBJS) 

clean : $(OUT) 
     rm $(OBJS) 
     rm $(CLEANPATH)/*.* 

run : $(OUT) clean 
     ./$(OUT) 

.PHONY: clean run 
+0

Normalement, vous pouvez omettre la ligne "$ (CXX) $ (CXXFLAGS) -c $ (SRCS) -o $ (OBJS)". Ou écrivez simplement sans "-o $ (OBJS)". –

Répondre

4

Vous dupant faire avec votre variable SHELL, il voit est à vide car il est juste un commentaire.

changement

SHELL := #!/bin/bash 

à

SHELL := /bin/bash 
+0

Merci à vous deux! Oui parfois tu ne vois pas ce truc ... Je devrais vraiment aller me coucher ^^ – 0815ZED

4

Cette ligne:

SHELL := #!/bin/bash 

est incorrect.

Votre makefile devrait fonctionner parfaitement si vous laissez cette ligne complètement. Si vous avez besoin quelque chose, essayez

SHELL := /bin/bash