다른 폴더의 모든 *.o 파일을 연결하려고 하는데 Makefile에서 다음과 같은 작업을 수행하고 싶습니다.
g++ *.o (folder/*.o and not folder/main.o) -o bin
여기서 간단한 정규식을 사용할 수 있나요?
답변1
이름에 공백 g++ *.o $( echo folder/*.o |tr ' ' "\n" | egrep -v folder/main.o )
이 없다고 가정하고 시도해 보세요 .folder/*.o
작동 방식은 다음과 같습니다.
echo folder/*.o
디렉토리와 함께 공백으로 구분된 파일 이름 목록을 생성합니다.
tr ' ' "\n"
모든 공백을 개행 문자로 변경합니다(한 줄에 하나의 파일 이름을 제공하므로 만족스럽습니다 egrep
.
egrep -v folder/main.o
이 목록에서 원하지 않는 파일 이름을 제거합니다.
$()
나머지 파일 이름을 명령줄에 넣습니다. $IFS
기본값은 SPACE, TAB, NEWLINE이므로 우리는 그렇지 않습니다. tr
다시 스페이스로 돌아가야 합니다 .
답변2
makefile이나 더 나은 자동 도구를 사용해야 하지만 다음과 같이 할 수 있습니다.
ls folder/ | grep "*.o" | grep -v "main.o" | while read -r file; do g++ $file -o bin; done
어쨌든 이 질문은 bash 관련 스택 사이트에서 더 잘 답변될 것입니다. 하하.
답변3
이것은 작동합니다:
ls -1 folder/*.o | grep -v main.o | xargs -I{} g++ {} -o bin
설명:
ls -1 폴더/*.o -> 폴더 폴더의 모든 .o 파일을 한 줄에 하나씩 나열합니다.
grep -v main.o -> 목록에서 main.o 제외
xargs -I{} g++ {} -o bin -> 실행 "g++ 파일 -o 빈"