Некоторые двоичные файлы сохраняют командную строку, используемую для их настройки, внутри двоичного файла (я не помню ни одного, который бы это делал, иначе я бы проверил исходный код). Есть ли способ получить командную строку, используемую в качестве макроса в configure.ac?
Например, если я скомпилирую свой код с помощью
./configure --foo bar CXX=g++
Я хотел бы сохранить--foo бар CXX=g++в макрос в config.h, чтобы его можно было вывести двоичным файлом с помощью флага
./myprogram -V
Version 1.0, compiled using: "./configure --foo bar CXX=g++"
решение1
configure
по сути является скриптом оболочки, загруженным из макросов M4, поэтому вы можете использовать его $*
для захвата всех аргументов ./configure
. Согласноруководство по autoconfэто следует сделать сразу после AC_INIT
, например:
AC_INIT([My Program], 1.0, ...)
config_flags="$*"
AC_DEFINE_UNQUOTED([CONFIG_FLAGS],["$config_flags"],[Flags passed to configure])
Это будет #define CONFIG_FLAGS
в config.h.