2014-02-06 294 views
0

我熟悉如何創建基本的makefiles,但我試圖從我的所有.cpp文件創建.dylib(如.dll)當前目錄和所有子目錄,我對我應該做的事情不知所措。這是我目前的makefile,它只爲2個.cpp文件生成.dylib。我不知道如何在沒有硬編碼的情況下爲所有.cpp文件執行此操作。我的makefile應該怎麼看?Makefile編譯當前目錄和所有子目錄中的所有.cpp文件

# Define a variable for classpath 
CLASS_PATH = ../bin 

# Define a virtual path for .class in the bin directory 
vpath %.class $(CLASS_PATH) 

all: libhpaprogram.dylib 

# [email protected] matches the target, $< matches the first dependancy 
libhpaprogram.dylib: 
    cc -v -c -stdlib=libstdc++ -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ HPAProgram.cpp -o libhpaprogram.o 
    cc -v -c -stdlib=libstdc++ -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ DCDTWrapper.cpp -o DCDTWrapper.o 
    libtool -dynamic -lSystem libhpaprogram.o DCDTWrapper.o -o libhpaprogram.dylib 

HPAProgram.h : HPAProgram.class 
    javah -classpath $(CLASS_PATH) $* 

clean: 
    rm HPAProgram.h libhpaprogram.o libhpaprogram.dylib 
+0

不要打平常規制定規則。每個產生'.o'的'.cpp'文件應該有一條編譯規則。然後有一條規則用於鏈接所有依賴關係。研究先前存在的規則。 –

回答

2

你必須首先選擇是使用make wildcard patterns

第二個選擇是使用一個跨平臺的工具,像CMake,並讓它產生Makefile文件給你。因此,你可以從[大部分]血淋淋的細節中解脫出來,比如精確的編譯器和鏈接器標誌等。CMake甚至支持MS Visual Studio項目的生成:)

0

我想出瞭如何編譯所有東西。我做了一些關於makefile的研究,這裏是我的最終生成文件:

SRC=DCDTsrc 
TGT=obj 
INCLUDES=-IDCDTsrc DCDTWrapper.h HPAProgram.h 
FLAGS=-stdlib=libstdc++ -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ -v 
SOURCES=$(wildcard $(SRC)/*.cpp) DCDTWrapper.cpp HPAProgram.cpp 
OBJS=$(addprefix $(TGT)/, $(notdir $(SOURCES:.cpp=.o))) 
CC=GCC 

# Define a variable for classpath 
CLASS_PATH = ../bin 

# Define a virtual path for .class in the bin directory 
vpath %.class $(CLASS_PATH) 

all: libhpaprogram.dylib 

$(TGT)/%.o: $(SRC)/%.cpp 
    $(CC) $(FLAGS) -c $< -o [email protected] 

$(TGT)/%.o: %.cpp 
    $(CC) $(FLAGS) -c $< -o [email protected] 

# [email protected] matches the target, $< matches the first dependancy 
libhpaprogram.dylib: $(OBJS) 
    libtool -dynamic -lSystem $(OBJS) libhpaprogram.dylib 



HPAProgram.h : HPAProgram.class 
    javah -classpath $(CLASS_PATH) $* 

clean: 
    rm -rf $(TGT) 
    mkdir $(TGT) 
    rm HPAProgram.h libhpaprogram.o libhpaprogram.dylib 
相關問題