LINUX.ORG.RU

Про опции сборки приложений


0

1

Можно каким-либо способом определить с какими опциями собрано конечное приложение? Как вариант: как при компиляции сохранить опции.

Абстрактная задача: скинуть warring с консоль с сообщением «Это собрано с оптимизацией под i486 (IRIX, --param l1-cache-size=4 etc...)процессор. Не рекомендуется использовать в производстве.»

Язык: C++

Компилятор: GCC

★★★★

Последнее исправление: DarkAmateur (всего исправлений: 1)
Ответ на: комментарий от Gorthauer

Крайне желательно!!! Только как именно?!

DarkAmateur ★★★★
() автор топика

ну это вроде как задача декомпиляции. Если исходники закрыты, то надежно определить это весьма трудно,а так не проще ли условную компиляцию применять или определять платформу и тип проца в программе через системные функции

pylin ★★★★★
()

> Как вариант: как при компиляции сохранить опции.

g++ $(CXXFLAGS) -DBUILD_CXXFLAGS='"$(CXXFLAGS)"' …
#ifndef BUILD_CXXFLAGS
#define BUILD_CXXFLAGS "unknown flags"
#endif

// ...

puts("program was built with " BUILD_CXXFLAGS);

arsi ★★★★★
()
Ответ на: комментарий от pylin

Блин, вот я и хочу посмотреть примеры. Гулом не осилил найти.

DarkAmateur ★★★★
() автор топика
Ответ на: комментарий от arsi

Прописал в Makefile отрендеринный qmake:

CC            = gcc
CXX           = g++
DEFINES       = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS        = -m64 -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS      = -m64 -pipe -fopenmp -DBUILD_CXXFLAGS="$(CXXFLAGS)" -O2 -Wall -W -D_REENTRANT $(DEFINES)

Огрёб рекурсивное обращение переменной

DarkAmateur ★★★★
() автор топика
Ответ на: комментарий от DarkAmateur

> Огрёб рекурсивное обращение переменной

и так будет с каждым!™, кто читает рекомендации по диагонали ;)

arsi ★★★★★
()
Ответ на: комментарий от arsi

Предположим обошёл

g++ -c -m64 -pipe -fopenmp -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.7.0/mkspecs/linux-g++-64 -I. -I/usr/local/Trolltech/Qt-4.7.0/include/QtCore -I/usr/local/Trolltech/Qt-4.7.0/include/QtGui -I/usr/local/Trolltech/Qt-4.7.0/include -I. -I. -o main.o main.cpp

g++ -m64 -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/Qt-4.7.0/lib -o qt main.o    -L/usr/local/Trolltech/Qt-4.7.0/lib -lgomp -DBUILD_CXXFLAGS="-m64 -pipe -fopenmp -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED" -lQtGui -L/usr/local/Trolltech/Qt-4.7.0/lib -L/usr/X11R6/lib64 -lQtCore -lpthread

Результат unknown flags

DarkAmateur ★★★★
() автор топика
Ответ на: комментарий от DarkAmateur

у вас BUILD_CXXFLAGS определяется только на этапе линковки, когда никому никакие дефайны уже не нужны. попробуйте переопределить QMAKE_CXX в файле проекта как «g++ -DBUILD_CXXFLAGS='«$(CXXFLAGS)»'». но даже если вдруг получится, лучше так не делать ;)

arsi ★★★★★
()
Ответ на: комментарий от DarkAmateur

> А почему «лучше так не делать ;)»?

убивается сама идея qt — кросс-платформенность. даже если модераторы этого изврата не заметят, то под виндами MSVC с вами дружить откажется ;)

arsi ★★★★★
()

> Как вариант: как при компиляции сохранить опции.

-frecord-gcc-switches

sjinks ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.