2015-01-07 4 views
1

Я пытаюсь сделать Makefile.am, который находит всю зависимость (c и cpp-файлы) во время выполнения (make).Autodetect source for automake

Я проверить эту команду:

example_SOURCES=$(shell find . -type f | grep -E '\.c|\.cpp' | awk '{L[NR]=$$0} END {{for (i = 1; i <=NR-1;i++) print L[i]"\\"}; {print L[NR]}}') 

Команда работает отлично (я управлять с оным из перенаправления в файл и источники отлично).

Но Makefile, не использует никаких источников:

gcc -g -O2 -o example 

Как я могу заархивировать свою цель для автомоек основывает все источники?

p.s Я прочитал, что automake должен знать все источники при вызове, это правильно? Это может быть объяснением, почему мой скрипт не работает.

Подробнее: У меня есть модификация Makefile для генерации и размещения эха на example_sources, и он содержит все мои файлы.

меня проверить различия между Makefile с моим сценарием и без и главное, эта часть:

С сценария:

am_example_OBJECTS = 

С ручной зависимостью:

am_example_OBJECTS = ./main.$(OBJEXT) 

Он кажется, что automake нужно знать сами файлы источников для создания make-файла.

+1

попытайтесь распечатать 'example_SOURCES' и посмотреть, перечислены ли все исходные файлы. –

+0

Для такого рода вещей, как правило, гораздо проще использовать cmake. – user35443

+0

@ user35443 Это не выбор для использования автотелов. – Manticore

ответ

0

Так я нашел обходной путь,

Я использую СЭД для изменения Makefile.am при конфигурировании.

# Source + dependency. 
files=`find ./src/ -type f | grep -E '\.h$$|\.hpp$$|\.c$$|\.cpp$$' | sed 's/\/src//g'` 
sed -i '/.*_SOURCES.*/c\'"$soft"'_SOURCES = '"$files"'' src/Makefile.am 

Это отлично работает, когда мы добавляем источники, нам просто нужно сделать ./configure, чтобы обновить список зависимостей.

Смежные вопросы