[英]C++ makefile building multiple dll and project structuring
我試圖尋找答案,但無濟於事,因此鑒於我的項目具有以下結構
makefile
./src
strings.cpp
networking.cpp
./bin
strings.dll
networking.dll
./build
strings.o
networking.o
./include
strings.h
networking.h
./lib
boost
我對Makefiles還是很陌生,從到目前為止的研究中,我設法做到了這一點(我知道不是很復雜)
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
,將其包含在構建中的推薦方式是什么?
感謝您的幫助,非常感謝
第一。 進行整個編譯過程是因為搜索目標“ 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和bin / 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>
第三-makefile不是構建系統本身,它只是具有域特定語言的工具。 您可以使用make編寫自己的構建系統。 如果您想准備好構建,最好學習一下automake / cmake /...。
這也是開始使用make工具的良好開始。 不要停下來,您會驚訝其中的強大功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.