내 대상 프로그램에 대한 두 개의 하드 링크를 만드는 방법을 파악하는 데 어려움이 있습니다. 내 목표 프로그램입니다 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
)를 사용합니다. 참고 A (매우) 오래 전,이에 한 번하는 것이 -f
지원되지 않았다 ln
(그 일에, -s
하나의 옵션이 아니었다 - 나는 오래 전에 그것에 대해 이야기하고있다),이 연결 규칙과 같은 규칙을 사용하는 것이 rm -f
로 ln
명령을 실행하기 전에 링크를 제거하십시오 .
또한 링크 라인은 일반적인 매크로를 사용하여 쓸 수 $@
및 $?
(이러한 신뢰성, POSIX 지원 매크로입니다) :
${AUX2}: ${TARGET}
${LN_S} $? $@
에 대한 전제 조건이 하나뿐이기 때문에 이것은 정상적으로 작동합니다 ${AUX2}
. 하나 이상의 전제 조건 $?
이있는 경우 작동하지 않습니다.주의하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다