make后出现意外的rm

时间:2017-03-16 09:34:44

标签: c linux

这是我的makefile的主要部分:

#openmp
ifeq($(BLITTZ_CC), icc)
    OPENMP_OPTIONS := -fopenmp
else
    OPENMP_OPTIONS := -fopenmp
endif

#compiler options
CXXFLAGS := -WALL -Wno-unused-parameter $(OPTIMIZE_OPTIONS) $(OPENMP_OPTIONS) $(MODE)

SRC_LIST := $(wildcard $(SRC_DIR)/*.cpp)
OBJ_LIST := $(patsubst %.cpp, $(BUILD_DIR)/%.o, $(notdir $(SRC_LIST)))
TARGET := main
BIN_TARGET := $(BIN_DIR)/$(TARGET)

$(BIN_TARGET): $(OBJ_LIST)
    $(BLITZ_CC) -o $@ $(OBJ_LIST) $(CXXFLAGS)

$(BUILD_DIR)/%.o: $(BUILD_DIR)/%.s
    $(BLITZ_CC) -o $@ -c $< $(CXXFLAGS)

$(BUILD_DIR)/%.s: $(SRC_DIR)/%.cpp
    $(BLITZ_CC) -o $@ -S $(CXXFLAGS) $<

#inc test
test:
    echo $(SRC_LIST)
    echo $(OBJ_LIST)
    echo $(BIN_TARGET)

#clean
clean:
    find $(BUILD_DIR) -name *.o -exec rm rf {} \;
    find $(BUILD_DIR) -name *.s -exec rm rf {} \;
    rm $(BIN_DIR)/*

这是make之后发生的事情:

enter image description here

为什么rm *.s出现在这里?我需要汇编文件,我不想删除它们。

2 个答案:

答案 0 :(得分:2)

因为您chained rules要从MainActivity文件创建.o文件,请将您的.cpp文件标记为中间文件并在构建目标后删除它们。

您需要使用.s将文件标记为珍贵文件,以告知make保留这些文件。

答案 1 :(得分:0)

find $(BUILD_DIR) -name *.s -exec rm rf {} \;将获取所有.s个文件并执行rm rf,因此如果要保留.s个文件,请删除该行