[Решено] Помогите понять как работает команда. (g++ -c -o simple.o -I. `wx-config --cxxflags` -MTsimple.o -MF`...)

Модератор: Модераторы разделов

Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

[Решено] Помогите понять как работает команда.

Сообщение kt315e »

Помогите разобратся что и как делает команда компиляции приложения (выковарено из makefile примеров wxWidget'а):

Код: Выделить всё

g++ -c -o simple.o -I.  `wx-config --cxxflags`   -MTsimple.o -MF`echo simple.o | sed -e 's,\.o$,.d,'` -MD simple.cc


При этом появляется файл simple.d, начало:

Код: Выделить всё

simple.o simple.o: simple.cc /usr/include/wx-2.8/wx/wx.h \
  /usr/include/wx-2.8/wx/defs.h /usr/include/wx-2.8/wx/platform.h \
  /usr/lib/wx/include/gtk2-unicode-release-2.8/wx/setup.h \
  /usr/include/wx-2.8/wx/chkconf.h /usr/include/wx-2.8/wx/features.h \
  /usr/include/wx-2.8/wx/version.h /usr/include/wx-2.8/wx/cpp.h \
  /usr/include/wx-2.8/wx/dlimpexp.h /usr/include/wx-2.8/wx/debug.h \


Задача этой замысловатой конструкции состоит, как я понимаю, в задании путей поиска хидер-файлов конкретной версии wxWidget, отличных от прописанного в коде программы и самих хидеров.
В программе и хидерах например #include "wx/wx.h", а надо #include "wx-2.8/wx/wx.h".
Причем работает не безглючно: при наличии в системе одновременно двух версий 2.6 и 2.8 при компиляции жрет хидеры из 2.6. Удалось откомпилировать только после сноса 2.6.
Cистема Debian 4.0.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Помогите понять как работает команда.

Сообщение drBatty »

kt315e писал(а):
30.05.2009 19:46
Помогите разобратся что и как делает команда компиляции приложения

зачем?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: [Решено] Помогите понять как работает команда.

Сообщение kt315e »

drBatty писал(а):
30.05.2009 20:21
зачем?


Причин несколько.
1. Предполагается, что написанная программа будет распространятся. Как делать makefile, если не даже не понимаю, что компилятору передаётся?
2. Несколько таких кудрявостей вместе - уже минное поле может оказатся.
3. Поимание возможностей системы, решаемая проблема довольно типична.
Спасибо сказали:
Olegator
Сообщения: 2493
ОС: SuseLinux 11.2 KDE 4.3

Re: [Решено] Помогите понять как работает команда.

Сообщение Olegator »

Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: [Решено] Помогите понять как работает команда.

Сообщение kt315e »

Конструкция раскрывается примерно в:

Код: Выделить всё

g++ -c -o simple.o -I.  -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread     -MD simple.cc ...


По опции -MD препроцессор ищет в по директориям для хидеров нужные хидера и правит пути в директивах #include.
Однако может привести к неоднозначности. Патологично как-то.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Помогите понять как работает команда.

Сообщение drBatty »

kt315e писал(а):
31.05.2009 10:28
По опции -MD препроцессор ищет в по директориям для хидеров нужные хидера и правит пути в директивах #include.

спасибо.
имхо жутко запутанно...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: