Простой способ получить все файлы .o, но один

Я пытаюсь связать все * .o-файлы из другой папки и хотел бы, чтобы в моем Makefile делал что-то вроде:

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

Есть ли какой-нибудь способ использования некоторого простого простого выражения?

1
задан 16 January 2012 в 23:15

3 ответа

Попробуйте g++ *.o $( echo folder/*.o |tr ' ' "\n" | egrep -v folder/main.o ), если ни один из folder/*.o не имеет SPACES в своих именах.

Вот как это работает:

echo folder/*.o создает список имен файлов, разделенных пробелами, с каталогом. tr ' ' "\n" изменяет все пробелы на новые строки (дает нам одно имя файла в строке, что делает egrep счастливым. egrep -v folder/main.o устраняет нежелательное имя файла из этого списка. $() помещает остальные имена файлов в командной строке. $IFS по умолчанию - SPACE, TAB, NEWLINE, нам не нужно tr возвращать их в пробелы.

3
ответ дан 25 May 2018 в 15:07
  • 1
    Теперь он отлично работает: D Хотя мне пришлось поставить команду в `` вместо $ (), поскольку по какой-то причине она ничего не возвращала. Еще раз спасибо: D – SlimJim 17 January 2012 в 00:02
  • 2
    Возможно, вы можете заменить для g++ *.o $( ls folder/*.o | egrep -v main.o ), поскольку ls уже разделяет каждый элемент. – Severo Raz 17 January 2012 в 00:19

Вы должны использовать make-файлы или даже лучше autotools, но вы можете сделать что-то вроде этого:

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

Этот вопрос будет лучше отвечать в связанном с bash стеке в любом случае ха-ха.

1
ответ дан 25 May 2018 в 15:07
  • 1
    Спасибо, человек, я n00b на стопках, просто задаюсь вопросом, кто из них это будет, «связанный с bash». сайт? – SlimJim 2 February 2012 в 23:21

Это должно работать:

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

Объяснение:

ls -1 folder / *. o -> список всех файлов .o (по одной в строке) в папке папки grep -v main.o -> исключить main.o из списка xargs -I {} g ++ {} -o bin -> выполнить «файл g ++ -o bin»
0
ответ дан 25 May 2018 в 15:07

Другие вопросы по тегам:

Похожие вопросы: