我的问题是关于在linux上编译错误。每次我尝试编译程序时它都会给我这个错误。我没有运气就尝试了不同的东西。
***没有规则来制作' /thread.exe'所需的目标' /pthread.d'。停止。
程序的makefile(pthread如下:
SOURCES=pthread.cpp
OBJECTS=$(addprefix $(BUILD_DIR)/, $(SOURCES:.cpp=.o))
DEPS=$(addprefix $(BUILD_DIR)/, $(SOURCES:.cpp=.d))
EXE=thread.exe
CXXFLAGS=-I.
LIBS=-pthread
//Making for host > make ARCH=host
ifeq ($(ARCH),host)
CXX=g++
BUILD_DIR=build/host
BIN_DIR=bin/host
endif
//Making for target > make ARCH= target
ifeq ($(ARCH),target)
CXX=arm-rpizw-g++
BUILD_DIR=build/target
BIN_DIR=bin/target
endif
all: $(BIN_DIR)/$(EXE)
$(BIN_DIR)/$(EXE): $(DEPS) $(OBJECTS)
mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -o $@ $(OBJECTS)
$(BUILD_DIR)/%.d: %.cpp
mkdir -p $(BUILD_DIR)
$(CXX) -MT$(@:.d=.o) -MM $(CXXFLAGS) $^ > $@
$(BUILD_DIR)/%.o: %.cpp
mkdir -p $(BUILD_DIR)
$(CXX) -c $< -o $@ $(CXXFLAGS)
ifneq ($(MAKECMDGOALS), $(filter $(MAKECMDGOALS),clean help))
-include $(DEPS)
endif
clean:
-rm -rf bin/
-rm -rf build/
答案 0 :(得分:1)
BUILD_DIR=build/target
之后你可能有空格。因此,$(DEPS)
解析为:
build/target /pthread.d
...,因此make将尝试制作/pthread.d
(以及build/target
...)。分配值时,请丢弃任何前面的空格,但不丢弃尾随空格。它将删除一个尾随注释,但不会在该行的结尾和注释之间删除空格。
为了调试此类问题,将$(info)
行添加到makefile中通常很有用:
$(info DEPS=_$(DEPS)_)
然后运行以查看是否有任何意外值。