[英]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.