在生成文件中添加源文件并更新依赖项
Adding source files and updating dependencies in makefiles
我正在用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 ...)
。
相关文章:
- 从C++本机插件更新Vector3数组
- 如何从C++中的依赖类型中获得它所依赖的类型
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 更新到莫哈韦后出现cmath错误
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- OpenMP:并行更新数组总是需要减少数组吗
- C++GTKMM gui循环依赖关系
- 通过ccmake在cmake中缓存依赖选项
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 当基类是依赖类型时,这是一个缺陷吗
- 更新 Visual Studio 2017,现在出现编译错误 C7510:"回调":使用依赖模板名称必须以 'template' 为前缀
- 在生成文件中添加源文件并更新依赖项
- 更新依赖于 Boost 库的库的 Boost 版本,而无需重新链接