gpt4 book ai didi

gcc - 为 gcc 生成依赖项

转载 作者:行者123 更新时间:2023-12-02 03:38:58 26 4
gpt4 key购买 nike

我正在编写一个 Makefile 来编译一个很长的项目。
基本上,我已经定义了我需要的所有对象。
当我需要生成依赖项时,问题就来了。
我正在做这样的事情:

a.o: $( $(CXX) -MM $(INCLUDE) A/a.cpp | sed 's/a.o: //')
$(CXX) $(CXXFLAGS) $(INCLUDES) A/a.cpp

b.o: $( $(CXX) -MM $(INCLUDE) A/b.cpp | sed 's/b.o: //')
$(CXX) $(CXXFLAGS) $(INCLUDES) A/b.cpp

libab.a: a.o b.o
$(LXX) $(LXXFLAGS) libab.a a.o b.o
$(CXX) -MM $(INCLUDE) A/a.cpp | sed 's/a.o: //'的输出列出了 a.cpp 需要编译的所有依赖项,因此当我声明对象但它不起作用时,我试图将这个命令的输出像依赖项一样放置。

你知道怎么做吗?

谢谢。

最佳答案

您为什么要尝试删除您已经手动输入的目标前缀?

而是只包含整个依赖文件。

-include $(ALL_CPP_FILES:%.cpp=%.d)

我通常使用的标志自动生成 .d (依赖)文件是:
CPPFLAGS+=-MMD    # automatic .d dependency file generation

这就像 -MD ,除了它只提到用户头文件,而不是系统头文件。

样本:

# BUILD=RELEASE

PRJNAME=demo
#
TARGETS+=bin/test

build: \
$(TARGETS) \
tags

all: build

clean:
rm -rf bin/* $(ALL_OBJ_FILES)
rm -rf $(ALL_CPP_FILES:%.cpp=%.d)

##############################
# definition
CC=gcc
CXX=g++

CPPFLAGS+=-MMD # automatic .d dependency file generation
CPPFLAGS+=-std=c++11

ifeq ($(BUILD),RELEASE)
CPPFLAGS+=-g -O3
CPPFLAGS+=-march=native
else
CPPFLAGS+=-g -O0
CPPFLAGS+=-DDEBUG -D_DEBUG
CPPFLAGS+=-DUNIT_TESTS
endif

CPPFLAGS+=-Wall -Wextra -pedantic
#CPPFLAGS+=-Werror

LDFLAGS+=-lpthread

ALL_CPP_FILES=A/a.cpp A/b.cpp
ALL_OBJ_FILES=$(patsubst %.cpp,%.o,$(ALL_CPP_FILES))

##############################
tags: $(ALL_CPP_FILES)
ctags -R A/

%.o: %.cpp
$(CXX) -c $(CPPFLAGS) $< -o $@

##############################
# tool targets
bin/test: $(ALL_OBJ_FILES)
mkdir -pv $(@D)
$(CXX) $^ $(LDFLAGS) -o $@

.PRECIOUS: S(ALL_OBJ_FILES)
.PHONY: clean all build

-include $(ALL_CPP_FILES:%.cpp=%.d)

关于gcc - 为 gcc 生成依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21432853/

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