在生成文件中添加源文件并更新依赖项

Adding source files and updating dependencies in makefiles

本文关键字:更新 依赖 源文件 添加 文件      更新时间:2023-10-16

我正在用C++编写一个(动态(库,并对其进行了一组测试。目前,我正在处理一个可以构建库或构建并运行测试(test目标(的 makefile(默认目标(。整个区别在于几个链接器标志以及是否包含单个.cpp文件(包含main(,但我无法正确构建test目标,因为依赖项列表由于某种原因没有更新。 这是整个生成文件:

CXX = g++
RM=rm -f
EXTRA_CCFLAGS   = -Wall -Wextra -Wcast-qual -Wfloat-equal -Wpedantic -Wpointer-arith -Wshadow
CXXOPTFLAGS     = -O2
CXXFLAGS        = -std=c++11 $(EXTRA_CCFLAGS) $(CXXOPTFLAGS)
LDLIBS=-larmadillo
MAKELIBFLAGS=-current_version 0.1 -compatibility_version 0.1 -dynamiclib
TARGET = libadsp.dylib
TESTTARGET = dsptest
SOURCE_FILES=src/stft.cpp src/filters.cpp src/windows.cpp src/helpers.cpp
OBJECT_FILES=$(subst .cpp,.o,$(SOURCE_FILES))
all: $(TARGET)
test: SOURCE_FILES += tests/tests.cpp
test: OBJECT_FILES = $(subst .cpp,.o,$(SOURCE_FILES))
test: $(TESTTARGET)
$(TARGET): $(OBJECT_FILES)
$(CXX) $(CXXFLAGS) $(MAKELIBFLAGS) -o $(TARGET) $(OBJECT_FILES) $(LDLIBS)
$(TESTTARGET): $(OBJECT_FILES)
$(CXX) $(CXXFLAGS) -o $(TESTTARGET) $(OBJECT_FILES) $(LDLIBS)
./dsptest
depend: .depend
.depend: $(SOURCE_FILES)
$(RM) ./.depend
$(CXX) $(CXXFLAGS) -MM $^>>./.depend;
.PHONY: clean
clean:
$(RM) $(OBJECT_FILES)
$(RM) ./.depend
include .depend

不能在先决条件列表中使用特定于目标的变量值。 GNU make 手册对此非常清楚:

另一个例外是特定于目标的变量值。此功能允许您根据 make 当前正在构建的目标为同一变量定义不同的值。与自动变量一样,这些值仅在目标配方的上下文中可用(以及其他特定于目标的赋值(。

(着重号后加(。 您可以专门添加测试目标:

$(TESTTARGET): $(OBJECT_FILES) tests/tests.o
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDLIBS)
./dsptest

附言。我不建议使用$(subst ...)来替换扩展;请改用$(patsubst ...)