하나를 제외한 모든 .o 파일을 얻는 간단한 방법

하나를 제외한 모든 .o 파일을 얻는 간단한 방법

다른 폴더의 모든 *.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 빈"

관련 정보