Maneira simples de obter todos os arquivos .o, mas um

1

Estou tentando vincular todos os arquivos * .o de outra pasta e gostaria de fazer no meu Makefile algo como:

g++ *.o (folder/*.o and not folder/main.o) -o bin

Existe alguma maneira que eu possa usar alguma espécie de regex simples aqui?

    
por SlimJim 16.01.2012 / 17:58

3 respostas

3

Teste g++ *.o $( echo folder/*.o |tr ' ' "\n" | egrep -v folder/main.o ) , assumindo que nenhum dos folder/*.o tem espaços em seus nomes.

Veja como funciona:

echo folder/*.o produz uma lista separada por espaços dos nomes de arquivos, com o diretório.
tr ' ' "\n" altera todos os espaços para novas linhas (fornecendo um nome de arquivo por linha, o que torna egrep happy.
egrep -v folder/main.o elimina o nome do arquivo indesejado da lista.
$() coloca o restante dos nomes dos arquivos na linha de comando. Como $IFS padrão é SPACE, TAB, NEWLINE, não precisamos tr deles de volta aos espaços.

    
por waltinator 16.01.2012 / 18:39
1

Você deve usar makefiles, ou melhor, autotools, mas você pode fazer algo assim:

ls folder/ | grep "*.o" | grep -v "main.o" | while read -r file; do g++ $file -o bin; done

Essa pergunta seria melhor respondida em um site de pilha relacionado ao bash, de qualquer forma, haha.

    
por Severo Raz 16.01.2012 / 18:36
0

Isso deve funcionar:

ls -1 folder/*.o | grep -v main.o | xargs -I{} g++ {} -o bin

Explicação:

  • pasta ls -1 / *. o - > listar todos os arquivos .o (um por linha) na pasta

  • grep -v main.o - > exclude main.o da lista

  • xargs -I {} g ++ {} -o bin - > execute " arquivo g + + -o bin "

por Wolfy 17.01.2012 / 23:41