簡體   English   中英

[MAKEFILE]:如何將 cpp 源文件從不同的源文件夾復制到一個目標文件夾並使用這些 cpp 文件使用 MAKE 構建

[英][MAKEFILE]: How to copy cpp source files from different source folders into one destination folder and use those cpp files to build using MAKE

我當前的 makefile 如下所示,它正確構建了目標。 但它無法在一個實例中構建目標,即源文件的路徑長度變得太長。 因此,我想將不同文件夾中的所有源文件收集到一個源目錄中,然后進行制作。

關於如何修改以下 makefile 以創建平面源目錄並使用該目錄中的文件使用 make 構建的任何線索

PROJ_DIR := ../
SRC_DIR += $(PROJ_DIR)project
SRC_FILES += $(wildcard $(SRC_DIR)/*/source/*.cpp)
OBJ_DIR := $(PROJ_DIR)TASK
OBJ_FILES += $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))

CXXFLAGS := --c++14

CC_INCLUDE_PATH += -I$(PROJ_DIR)project/include

.PHONY: all clean dirs

all: $(OBJ_DIR) $(OBJ_FILES) 
    "$(COMPILERBIN)"/cc.exe -rvn crackLib.a $(OBJ_FILES)

clean:
    @rm -rf crackLib.a $(OBJ_DIR) $(FLAT_INC_DIR)  

# Build target for directory creation. Intermediate build files will be placed here.
$(OBJ_DIR):
    mkdir -p $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp 
    "$(COMPILERBIN)"/cc.exe $(CXXFLAGS) -c -o $@ $< $(CC_INCLUDE_PATH) 

$(OBJ_DIR)/%.o: $(TSM_SRC_DIR)/%.cpp
    "$(COMPILERBIN)"/cc.exe $(CXXFLAGS) -c -o $@ $< $(CC_INCLUDE_PATH) 

$(OBJ_DIR)/%.o: $(SL_SRC_DIR)/%.cpp
    "$(COMPILERBIN)"/cc.exe $(CXXFLAGS) -c -o $@ $< $(CC_INCLUDE_PATH) 

-include $(OBJ_FILES:.o=.d)

假設我們有源文件$(SRC_DIR)/longpath/source/foo.cpp ,並且我們想要構建 object 文件$(OBJ_DIR)/foo.o 我們可能希望這條規則:

$(OBJ_DIR)/foo.o: $(SRC_DIR)/longpath/source/foo.cpp
    ... $< -o $@

但是我們在寫makefile的時候不知道路徑,所以在構建的時候一定要讓Make弄清楚。

有不止一種方法可以做到這一點。 最簡單的是使用vpath指令

如果我們提前 ken 路徑,我們可以這樣寫:

vpath %.cpp $(SRC_DIR)/longpath/source

$(OBJ_DIR)/foo.o: foo.cpp
    ... $< -o $@

Make 將使用vpath搜索源文件,並使用其完整路徑作為先決條件(因此$< )。

vpath指令可以采用多個目錄,雖然我們事先不知道路徑,但我們知道如何計算它們:

vpath %.cpp $(dir $(SRC_FILES))

$(OBJ_DIR)/foo.o: foo.cpp
    ... $< -o $@

一旦我們確認這可行,我們就可以切換到模式規則:

$(OBJ_DIR)/%.o: %.cpp
    ... $< -o $@

並相應地更改OBJ_FILES

OBJ_FILES += $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(notdir $(SRC_FILES)))

all: $(OBJ_FILES)
    ... $^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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