Makefile for host&目标

时间:2018-02-27 15:48:06

标签: c++ linux multithreading makefile host

我的问题是关于在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/    

1 个答案:

答案 0 :(得分:1)

BUILD_DIR=build/target之后你可能有空格。因此,$(DEPS)解析为:

 build/target   /pthread.d

...,因此make将尝试制作/pthread.d(以及build/target ...)。分配值时,请丢弃任何前面的空格,但不丢弃尾随空格。它将删除一个尾随注释,但不会在该行的结尾和注释之间删除空格。

为了调试此类问题,将$(info)行添加到makefile中通常很有用:

$(info DEPS=_$(DEPS)_)

然后运行以查看是否有任何意外值。

相关问题