簡體   English   中英

C ++ Makefile構建多個dll和項目結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM