2013-03-04 3 views
1

Есть ли какой-либо макрос в C++ (с использованием gcc) для получения параметров компиляции, используемых для создания исполняемого файла? Я уверен, что я видел что-то подобное в диалогах.Получить параметры компилятора из программы

любой помощь будет оценен

PS: а вопрос в Detect GCC compile-time flags of a binary интересах в поиске вариантов активированных скомпилировать программу, я интересно найти точные параметры командной строки, используемые для компиляции моей программы из этого источник программы.

+2

смотрите здесь http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html –

+2

Если вам удобно указывать опцию перед сборкой, это поможет: http: // stackoverflow. com/questions/12112338/get-the-compiler-options-from-a-compiled-executable – jogojapan

+0

@ AndreasGrapentin О, я вижу. Возможно, я неправильно понял этот вопрос.Но если это так, вы можете легко составить ответ на основе информации из предоставленной вами ссылки. – jogojapan

ответ

0

Так как я использую систему QMAKE сборки я наткнулся на это решение:

Я добавил эту строку в конце моего про файл:

QMAKE_CXXFLAGS += -DFLAGS=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" 

затем извлеченной то, что я хочу от макро FLAGS

2

Помимо создания строки компиляции из Общие предопределенные макросы , что кажется суете. Я думаю, что есть простой способ сделать это. gcc -V на debian возвращает флагов, используемых для настройки.

Однако мой выстрел состоял бы в том, чтобы получить полную команду в эквивалентном шаге ./configure и выгрузить его в файл, например config_line.h, в качестве определения.

Что-то вроде:

./configure:

#!/bin/sh 
echo "#define conf_flags \"configured with: "$*"\"" >> config_line.h 
#do some configuration steps here 
#maybe even compilation itself 

Тогда:

luk32:~/projects/tests$ ./test.sh --with=test 
luk32:~/projects/tests$ cat ./config_line.h 
#define conf_flags "configured with: --with=test" 

Вы получаете полную линию конфигурации, определенный во внешнем файле под определения заявления. Я думаю, что он довольно прост и прост в использовании. И не нужно много магии компилятора.

Также стоит отметить, что вы можете, скорее всего, (если не всегда) создавать такие файлы непосредственно перед фактической компиляцией, чтобы они были на самом деле актуальными и действительными на этапе компиляции. Ответ в get-the-compiler-options-from-a-compiled-executable означает, что исполняемый файл уже существует, что может быть обломком в некоторых случаях.

Примечание: Я дал Баш пример, но я уверен, что вы можете вывести аналогичный файл заголовка под любой половины спуска системы сборки, будь это сделать, QMAKE, CMake и т.д. Баш начать простейший случай.

Я думаю, что большинство из них имеют доступ к командной строке, с которой они вызывают, а также обеспечивают простой способ получить фактическую команду компиляции. Например, чтобы предоставить два литерала, один с командами, используемыми для make как -j 13, а другой g++ ..., используемый для фактического этапа компиляции, выполненного make.

Note2: Я знаю, что это не ответ, который задал ОП, но я полагаю, что он служит его цели в 1-м месте.

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