生成文件匹配规则和配方中的模式
Makefile match patterns in rule and recipe
我的测试在我的makefile中出现了一种模式。我知道模式匹配器%
和$<
.我正在尝试编译一些C++。
我有一个生成文件片段,如下所示:
diff-test: main-test.o diff.o test/diff-test.cpp
$(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/diff.o test/diff-test.cpp -o build/diff-test
build/diff-test
walk-test: main-test.o walk.o test/walk-test.cpp
$(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/%.o test/%-test.cpp -o build/%-test
build/walk-test
我尝试了类似以下内容:
%-test: main-test.o %.o test/%-test.cpp
$(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/$<.o test/$<-test.cpp -o build/$<-test
build/$<-test
但这与我想要的测试不匹配:
make diff-test
make: *** No rule to make target `diff-test'. Stop.
我认为你不需要$<
. 这扩展到第一个先决条件,在这种情况下是main-test.o
这意味着您将使用main-test.o.o
和test/main-test.o-test.cpp
构建build/main-test.o-test
,这似乎不太可能。
你可能的意思是$*
。
但是,您不能在先决条件列表中使用自动变量:它们仅在配方本身内部定义。
为什么不使用先决条件列表中的模式;这就是模式规则应该如何工作:
%-test: %.o test/%-test.cpp main-test.o
$(CC) $(FLAGS) $(BOOST_LINK_FLAGS) $^ -o build/$*-test
build/$*-test
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何在全屏模式下(在OpenGL中)使背景透明
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- 在C++的一系列数字中查找重复模式
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 用于在回调中调用解析器的设计模式
- Eclipse/Netbeans 中的处理模式行
- 用于在并发环境中访问 MMIO 的软件模式
- 在数组中查找重复模式
- C++中的链式生成器模式
- 调用方如何知道 VARIANT 中何时有十进制?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- C++函数中引发异常并在调用方中捕获它
- _O_WTEXT、_O_U16TEXT_O_U8TEXT - 这些模式在 mingw 编译器中是否可行,是否有任何解决方
- 在emacs中c++模式下注释区域的快捷键是什么?