gpt4 book ai didi

c++ - 主机和目标的 Makefile

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:11 24 4
gpt4 key购买 nike

我的问题是关于 linux 上的编译错误。每次我尝试编译程序时,它都会给我这个错误。我尝试了不同的东西,但运气不佳。

*** 没有创建目标“/pthread.d”的规则,“/thread.exe”需要它。停止。

程序的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/

最佳答案

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

 build/target   /pthread.d

...,因此 make 将尝试生成 /pthread.d(和 build/target...)。分配值时,make 会丢弃任何前面的空格,但不会丢弃尾随空格。它会删除尾随注释,但不会删除行尾和注释之间的空格。

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

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

然后运行看看有没有什么意外的值。

关于c++ - 主机和目标的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com