c++ - 头文件依赖不起作用

标签 c++ c makefile gnu-make

我已经在 Makefile 下面写下了对 this question 的回答添加了头文件依赖性规则,但它不起作用。我做了一个干净的然后构建。之后,我使用 touch 命令修改了 Parse.h 并运行“make all”,它说 Test.exe 是最新的。我也只用“make”命令得到了相同的输出。

任何人都可以让我知道我哪里出错了。

RM      := rm -rf
MKDIR   := mkdir -p
FIND    := find
CPIO    := cpio
CD      := cd
MV      := mv

# Set compiler flags
ifeq ($(BUILD_TYPE),DEBUG)
        COMPILE_FLAGS= -c -fpic -DDBG=1  -g -DUSE_UTLPATMAT=1 -Wall
else ifeq ($(BUILD_TYPE),RELEASE)
        COMPILE_FLAGS= -c -fpic  -O3 -DUSE_UTLPATMAT=1 -Wall
else ifeq ($(BUILD_TYPE),PERF)
        COMPILE_FLAGS= -c -fpic -O3  -DUSE_UTLPATMAT=1 -DPERF_COMPONENT -Wall
else
        COMPILE_FLAGS= -c -fpic  -O3 -DUSE_UTLPATMAT=1 -Wall
endif

export STFP_HOME = $(shell cd "$(CURDIR)/.."; pwd)
STFP_LIB = $(STFP_HOME)/lib
STFP_BIN = $(STFP_HOME)/bin

$(shell mkdir -p ${STFP_LIB})
$(shell mkdir -p ${STFP_BIN})


STFP_INC = $(CURDIR)/SP

SPTEST_SRC = $(CURDIR)/SPTest
SPTEST_INC = $(CURDIR)/SPTest

STFP_SRC = $(CURDIR)/SP
STFP_INC = $(CURDIR)/SP

UTILITIES_SRC_DIR = $(CURDIR)/../utilities


LIBS= -L${CLIENT_LIB} 


INCS_DIRS= -I${CLIENT_INC} 


#Subdivision Publisher Test
SPTESTSRCS=\
$(SPTEST_SRC)/Parse.cpp \
$(SPTEST_SRC)/Main.cpp 


SPTESTOBJS=$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SPTESTSRCS)))

all := $(STFP_BIN)/Test.exe 


#################### Main targets #####################################
all:$(all)
clean:
    find $(STFP_SRC)/ -name "*.o" | xargs rm -rf
    find $(SPTEST_SRC)/ -name "*.o" | xargs rm -rf
    rm -rf $(STFP_LIB)
    rm -rf $(STFP_BIN)

#######################################################################


$(STFP_BIN)/Test.exe: $(SPTESTOBJS)
    $(CXX) -g  $(INCS_DIRS) \
    $(SPTESTOBJS) -o $@ \
    $(LIBS) -lmodpbase64 -lboost_regex -lboost_filesystem -lboost_system -lboost_serialization \
    -lutility

%.o : %.cpp
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o $@ $<

%.o : %.c
    $(CC) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o $@ $<


################# Dependencies #########################

depend: .depend
.depend: $(SPTESTSRCS)
    rm -f .depend
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -MM -$(SPTESTSRCS) > .depend

-include .depend

########################################################

谢谢

最佳答案

您似乎期望 SPTest 中有 .o 文件。您可以使用:

SPTest/%.o: SPTest/%.cpp
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o $@ $<

或使用(@D 是目录,@F 是文件名):

%.o : %.cpp
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o $(@D)/$(@F) $<

如果您仍然遇到错误,请告诉我。

关于c++ - 头文件依赖不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40930906/

相关文章:

c++ - 获取 QGraphicsView 的大小

c - 宏扩展正确,但给我 "expected expression"错误

c++ - 投影 makefile 以进行调试/发布配置

c++ - 为什么共享内存(在 ipc 中)不需要上下文切换?它是来自内核空间的内存映射到用户空间吗?

c++ - 使用 CUDA 线程索引作为数字

c++ - C 和 C++ 中 '.' 和 '->' 运算符的正式名称是什么?

native 可执行文件的 Android NDK 分析器不生成任何数据

amazon-web-services - 亚马逊网络服务 : NoCredentialsError: Unable to locate credentials

php - 在 OS X 上编译 PHP --with-php-config

c++ - 投入 constexpr 函数 : do we need wrapping condition?