2011-09-23 157 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