【发布时间】:2020-08-22 21:19:33
【问题描述】:
我当前的 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)
【问题讨论】:
-
你说源文件路径太长会失败。 Make命令编译器在不存在的目录(
../TASK/longpath/source/)中构建目标文件(foo.o)的问题? -
是的,因为 ./TASK/longpath/source/ 太长,编译器似乎认为该文件不存在。但实际上源文件确实存在。