2011-09-23 48 views
2

首先,我試圖習慣makefile,但是我對這個有了新的認識。首先,下面的文件應該首先編譯所有./src/*.cpp文件到./src/*.o(文件名存在),然後完成與simulation.cpp的編譯並將所有東西鏈接在一起。現在,使返回錯誤消息:make:-c:找不到的命令

make: -c: Command not found 

我幾乎沒有線索如何進行!通配符構造是否會以所需的方式工作?非常感謝你的努力!

#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

通常情況下可以省略行 「$(CXX)$(CXXFLAGS)-C $(SRCS)-o $(OBJS)」。或者直接寫下「-o $(OBJS)」。 –

回答

4

你在欺騙你的SHELL變量,它看起來是空的,因爲它只是一個註釋。

變化

SHELL := #!/bin/bash 

SHELL := /bin/bash 
+0

謝謝你們兩位!是的,有時你看不到這些東西...我真的應該去睡覺^^ – 0815ZED

4

這條線:

SHELL := #!/bin/bash 

不正確。

如果你完全離開這條線,那麼你的makefile應該工作的很好。如果你確實需要一些東西,試試

SHELL := /bin/bash