簡體   English   中英

用於主機和目標的Makefile

[英]Makefile for host & target

我的問題是關於在Linux上編譯錯誤。 每次我嘗試編譯程序時,都會出現此錯誤。 我沒有運氣就嘗試了其他事情。

***'/thread.exe'不需要創建目標'/pthread.d'的規則。 停止。

程序的生成文件(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/    

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

 build/target   /pthread.d

...,因此make將嘗試制作/pthread.d (和build/target ...)。 分配值時,make會丟棄前面的所有空格,但不舍棄后面的空格。 它將刪除結尾的注釋,但不會在行尾和注釋之間刪除空格。

為了調試這種類型的問題,通常將$(info)行添加到makefile中通常是有用的:

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

然后運行以查看是否存在任何意外值。

暫無
暫無

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

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