*.c
내 목표는 Makefile에서 .로 끝나는 파일 이름을 검색하고 해당 .c
파일 이름의 루트를 대상에 추가하는 것입니다.
Makefile
:
TARGETS = $(shell ls *.c | sed "s/\.c$//g")
all: $(TARGETS)
문제는 쉘 명령이 sh에서 예상대로 작동한다는 것입니다.
$ sh -c 'ls *.c | sed "s/\.c$//g"'
hello
...다음과 같이 실패하더라도 make
:
$ make
sed: 1: "s/\.c/g": unterminated substitute in regular expression
make: Nothing to be done for `all'.
탈출을 시도했는데 결과는 다음 $
과 같습니다.\$
`sed: 1: "s/\.c\/g": unterminated substitute pattern`
"
큰따옴표( )를 작은따옴표( )로 바꾸는 경우에도 마찬가지입니다 '
.
답변1
당신은 탈출해야합니다 $
. 에서는 make
를 사용하여 이 작업을 수행할 수 있습니다 $$
. 귀하의 라인은 다음과 같아야합니다 :
TARGETS = $(shell ls *.c | sed "s/\.c$$//g")
이것이 질문에 직접적으로 대답하는 동안 @cas의 솔루션이 더 좋아 보입니다.
답변2
GNU Make 사용:
objects := $(patsubst %.c,%.o,$(wildcard *.c))
all : $(objects)
자세한 내용은 info make
또는 pinfo make
검색 wildcard
및 기능을 참조하세요 . 배포판에 따라 전체 문서를 얻으려면 먼저 패키지(또는 이와 유사한 것)를 patsubst
설치해야 할 수도 있습니다 .make-doc
make