2015-11-16 1 views
0

НКУ имеет -M -класса варианты (-MMD, -MF и т.д.), что позволяет генерировать файл зависимостей во время компиляции исходного файла. Файл зависимостей содержит Makefile правила, определяющие, от каких исходных файлов и заголовков зависит сгенерированный объектный файл. Файл зависимостей может быть включен в Makefile, а затем make автоматически перекомпилирует исходный файл при изменении заголовков.Как создать файл зависимостей для исполняемого файла (во время связывания) с GCC

Мне нужна аналогичная опция, но для создания файла зависимостей во время связывания исполняемого файла. Файл зависимостей должен содержать список библиотек, используемых для связывания исполняемого файла, поэтому, если какая-либо из библиотек обновляется, make будет автоматически выполнять компоновку исполняемого файла.

Я попытался использовать те же флаги (-MMD, -MF), но они не работают для связи. Кажется, что они предназначены только для создания файлов зависимостей во время компиляции.

Есть ли другие флаги или средства для создания файла зависимостей для исполняемого файла?

ответ

0

До сих пор я не нашел посвященный Gcc варианты создания файла зависимостей для исполняемого файла, но нашел --trace вариант (-Wl,--trace при использовании НКУ). Эта опция генерирует list of libraries used во время связывания. Его выход имеет следующий формат:

gcc -Wl,--trace myprog.c -o myprog -L. -lmylib 
-lmylib (./libmylib.a) 
-lgcc_s (/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libgcc_s.so) 
... 

Список библиотек могут затем быть преобразованы в Makefile правил с использованием СЭД:

echo "myprog: " > myprog.dep 
gcc -Wl,--trace myprog.c -o myprog -L. -lmylib \ 
    | sed -n 's/.*(\(.*\)).*/\1 \\/p' >> myprog.dep 

Так myprog.dep будет иметь следующее содержание:

myprog: \ 
./libmylib.a \ 
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libgcc_s.so \ 
... 

Этот файл зависимостей может быть включен в Mak efile и сделать будет relink myprog, если какая-либо из библиотек обновлена.

Файл зависимостей не содержит список объектных файлов, но объектные файлы, как правило, известны в Makefile -script без помощи компилятора:

myprog: $(OBJS) 
    gcc -Wl,--trace $^ -o myprog -L. -lmylib | sed -n 's/.*(\(.*\)).*/\1 \\/p' >> myprog.dep 
Смежные вопросы