我正在努力学习如何阅读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运行cdb调试器(如gdb)的第一步。
答案 0 :(得分:1)
在makefile中以$
开头的任何内容都是变量引用(或者,在GNU make中,是一个内置函数),除非它与另一个$
一起转义(即,是$$
)。变量的名称可以是单个字符,如$@
,$A
等,也可以是括在括号或括号中的一个或多个字符,如$(@)
,{ {1}}(与最后一个相同),${A}
,$(FOO)
等。
GNU make manual有很多关于所有预定义和特殊变量的信息。这些奇怪的变量特别是automatic variables。
如果它不是变量,而且它是配方的一部分,那么它会被发送到shell,所以你应该查看shell文档来理解它。
答案 1 :(得分:0)
说&lt;是否正确?表示从中输入和输入$&lt;是依赖项列表中的第一个文件。和&gt;表示管道输出到,而$ @是输出文件,即。 :符号左侧的文件?