2015-07-11 82 views
1

我試圖尋找答案,但無濟於事,所以給我的項目已得到了下面的結構C++的makefile構建多個DLL和項目結構

makefile 
./src 
    strings.cpp 
    networking.cpp 
./bin 
    strings.dll 
    networking.dll 
./build 
    strings.o 
    networking.o 
./include 
    strings.h 
    networking.h 
./lib 
    boost 

我很新的Makefile文件,並從研究我曾經做過到目前爲止,我還設法讓這一起(不是很複雜,我知道)

CC = g++ 
SRC = src/strings.cpp 
OUT = bin/strings.dll 
OBJ = build/strings.o 
INC= -I include 

all: strings.dll 

strings.dll: strings.o 
    $(CC) -shared -o $(OUT) $(OBJ) 

strings.o: $(SRC) 
    $(CC) $(INC) -DBDLL -c $(SRC) -o $(OBJ) 

的問題/疑問我已經是

1之後,一直都會通過量整個編譯過程,即使我沒有改變源代碼?

2-我怎樣才能讓事情更有效?我看到了使用通配符等的人的例子,但我很難跟隨。我是否可以使用通配符開始,因爲我需要爲每個目標單獨使用dll?

3 - 比方說,我介紹algorithms.h and algorithms.cpp什麼是建議包括在構建?

感謝您的任何幫助,真的很感激它

回答

1

首先。整個編譯過程是因爲搜索目標「strings.dll」,但建立bin/strings.dll。所以,如果你如果前提改變它替換到

bin/strings.dll: strings.o 
    $(CC) -shared -o $(OUT) $(OBJ) 

bin/strings.o: $(SRC) 
    $(CC) $(INC) -DBDLL -c $(SRC) -o $(OBJ) 

構建將只執行目標(BIN/strings.o和斌/ strings.dll)。

其次 - 基本上通配符用於搜索目錄內的所有文件,如下所示:$(whildcard *.cpp)求值爲當前目錄內的所有cpp文件。所以,你可以寫這樣的事情:

all_sources = $(wildcard *.cpp) 
all_objects = $(addprefix bin/,$(all_sources:.cpp=.o)) 

all: bin/strings.dll 

bin/strings.dll: $(all_objects) 
    <how to build strings.dll from objects> 

bin/%.o: %.cpp 
    <how to build objects inside bin dir from cpp of current dir>  

三 - 生成文件沒有建立系統本身來說它只是具有領域特定語言的工具。你可以使用make編寫自己的構建系統。如果你想做好準備,你最好學習automake/cmake/......其中很多。

此外,開始使用製作工具是一個很好的開始。不要停下來,你會驚訝它內部的力量。

+0

感謝您的詳細解答...真正幫助超過了我的要求 –