我正在尝试学习如何阅读 makefile 并遇到了这个。我的问题是指目标为 %.c
的规则.在第一个命令上。它说的地方
%.c: %.psvn psvn2c_core.c psvn2c_state_map.c psvn2c_abstraction.c
../psvn2c $(PSVNOPT) --name=$(*F) < $< > $@
什么是$(*F) < $ < > $@
意思是?我已经在下面发布了整个 makefile。
CC = gcc
CXX = g++
OPT = -g -Wall -O3 -Wno-unused-function -Wno-unused-variable -std=c++11
PSVNOPT = --no_state_map --no_backwards_moves --history_len=0 --abstraction --state_map
psvn2c_core.c:
cp ../psvn2c_core.c ./psvn2c_core.c
psvn2c_state_map.c:
cp ../psvn2c_state_map.c ./psvn2c_state_map.c
psvn2c_abstraction.c:
cp ../psvn2c_abstraction.c ./psvn2c_abstraction.c
%.c: %.psvn psvn2c_core.c psvn2c_state_map.c psvn2c_abstraction.c
../psvn2c $(PSVNOPT) --name=$(*F) < $< > $@
rm -f ./psvn2c_core.c ./psvn2c_state_map.c ./psvn2c_abstraction.c
我想将此理解为学习如何使用 eclipes 或 visual studio 运行 c++ 调试器(例如 gdb)的第一步。
最佳答案
在 makefile 中以 $
开头的任何内容都是变量引用(或者,在 GNU make 中,是内置函数),除非它被另一个 $
转义(即,是 $$
)。变量名可以是单个字符,如$@
、$A
等,也可以是一个或多个用圆括号或大括号括起来的字符,像$(@)
, ${A}
(和上一个一样), $(FOO)
, ${ FOO}
等
GNU make manual有很多关于所有预定义变量和特殊变量的信息。这些看起来很奇怪的变量特别是 automatic variables .
如果它不是变量,而是配方的一部分,那么它会被发送到 shell,因此您应该查看 shell 文档以了解它。
关于linux - 阅读生成文件。符号的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659029/