我很难弄清楚如何为目标程序创建两个硬链接。我的目标程序是foo
,我想创建两个指向foo的硬链接,一个称为baz
,另一个称为bar
。目前,我的makefile如下所示:
CC = gcc
CFLAGS = -g -std=c99 -pedantic -Wall
HOME = /my/home/dir
SOURCES = main.c bar.c baz.c datastructure.c ${HOME}/addNodes.c
OBJECTS = $(SOURCES:.c=.o)
TARGET = foo
LN_F = ln -f
$(TARGET): $(OBJECTS)
${CC} ${CFLAGS} -o $@ $^
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
bar: ${TARGET}
${LN_F} ${TARGET} bar
baz: ${TARGET}
${LN_F} ${TARGET} baz
问题是,我现在必须通过输入"ln -s foo bar"
和手动创建到foo的硬链接。"ln -s foo baz"
如果您使用符号链接:
TARGET = foo
AUX1 = bar
AUX2 = baz
LN_S = ln -s -f
all: ${TARGET} ${AUX1} ${AUX2}
${TARGET}: $(OBJECTS)
${CC} ${CFLAGS} -o $@ $^
${AUX1}: ${TARGET}
${LN_S} ${TARGET} ${AUX1}
${AUX2}: ${TARGET}
${LN_S} ${TARGET} ${AUX2}
如果您使用硬链接,则将使用ln -f
(不带-s
)。需要注意的是从前一个(非常)很久以前,在-f
不被支持ln
(在那些日子里,-s
是不是一种选择,要么-我说的是很久以前),像这些链接规则的规则会使用rm -f
到在运行ln
命令之前,请删除链接。
您还可以使用通用宏$@
和$?
(这些是可靠的,受POSIX支持的宏)编写链接线:
${AUX2}: ${TARGET}
${LN_S} $? $@
之所以有效,是因为只有一个先决条件${AUX2}
; 如果存在多个先决条件,$?
则将无法正常工作-请当心。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句